Android通过手势实现的缩放处理

本活动展示了如何在触摸屏设备上实现多点触摸交互,并通过编程绘制响应于触摸动作的图形,涉及Canvas、MotionEvent等核心API的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值