Android通过手势实现的缩放处理
01 import
android.app.Activity;
02
import
android.content.Context;
03
import
android.graphics.Canvas;
04
import
android.graphics.Color;
05
import
android.graphics.Paint;
06
import
android.os.Bundle;
07
import
android.util.DisplayMetrics;
08
import
android.view.MotionEvent;
09
import
android.view.View;
10
?
?11
/**
12
?
* ...
13
?
*?
14
?
* @author vlinux
15
?
*?
16
?
*/
17
public
class
MultiTouchTestActivity
extends
Activity {
18
????
/** Called when the activity is first created. */
19
????
@Override
20
????
public
void
onCreate(Bundle savedInstanceState) {
21
????????
super
.onCreate(savedInstanceState);
22
????????
// setContentView(R.layout.main);
23
????????
View view =
new
MultiTouchView(
this
);
24
????????
setContentView(view);
25
????
}
26
?
?27
????
class
MultiTouchView
extends
View {
28
?
?29
????????
private
float
x1;
30
????????
private
float
y1;
31
????????
private
float
x2;
32
????????
private
float
y2;
33
?
?34
????????
public
MultiTouchView(Context context) {
35
????????????
super
(context);
36
????????????
// TODO Auto-generated constructor stub
37
????????
}
38
?
?39
????????
@Override
40
????????
public
boolean
onTouchEvent(MotionEvent event) {
41
????????????
// TODO Auto-generated method stub
42
?
?43
????????????
float
size = event.getSize();
44
?
?45
????????????
int
szi = (
int
) size;
46
????????????
int
dxi = szi >>
12
;
47
????????????
int
dyit = ((
1
<<
12
) -
1
);
48
????????????
int
dyi = szi & dyit;
49
?
?50
????????????
DisplayMetrics metrics = getResources().getDisplayMetrics();
51
????????????
float
dx = metrics.widthPixels * dxi / (
float
) dyit;
52
????????????
float
dy = metrics.heightPixels * dyi / (
float
) dyit;
53
?
?54
????????????
x1 = event.getX();
55
????????????
y1 = event.getY();
56
?
?57
????????????
x2 = x1 + dx;
58
????????????
y2 = y1 + dy;
59
?
?60
????????????
invalidate();
61
?
?62
????????????
return
true
;
63
????????
}
64
?
?65
????????
@Override
66
????????
protected
void
onDraw(Canvas canvas) {
67
????????????
// TODO Auto-generated method stub
68
????????????
super
.onDraw(canvas);
69
?
?70
????????????
float
r = (
float
) Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2)
71
????????????????????
* (y1 - y2)) /
2
;
72
????????????
r =
50
>= r ?
50
: r;
73
?
?74
????????????
Paint paint =
new
Paint();
75
????????????
paint.setColor(Color.BLUE);
76
????????????
canvas.drawCircle(x1, y1, r, paint);
77
?
?78
????????
}
79
?
?80
????
}
81
?
?82
}