android多点触控,图片的拖拽与放大缩小
生活随笔
收集整理的這篇文章主要介紹了
android多点触控,图片的拖拽与放大缩小
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//直接復制粘貼就可以使用
public class MainActivity extends AppCompatActivity {private ImageView MyImageView;private float yd;private float xd;//定義三個狀態記錄按壓時是單點還是多點private final int MODE_ONE = 1;private final int MODE_TOW = 2;private final int MODE_NONE = 0;//默認的狀態private int currentMode = MODE_NONE;private double spa;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}Matrix m = new Matrix();Matrix mNew = new Matrix();private void initView() {MyImageView = (ImageView) findViewById(R.id.Image);MyImageView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {//選擇到底是 按壓。移動。 抬起,switch (event.getAction() & MotionEvent.ACTION_MASK) {case MotionEvent.ACTION_DOWN:currentMode = MODE_ONE;//一個手指的時候按壓下時(x,y)xd = event.getX();yd = event.getY();// 將圖片的矩陣放入定義的矩陣中()m.set(MyImageView.getImageMatrix());break;case MotionEvent.ACTION_POINTER_DOWN://計算兩手指間的距離(按下的時候有)spa = spacing(event);//只有兩只之間的距離大于20像素的是時候算是多點的觸摸if (spa > 20) {currentMode = MODE_TOW;}break;case MotionEvent.ACTION_MOVE:if (currentMode == MODE_ONE) {//老矩陣放入新的矩陣(啥意思我也不知道跟著寫的)mNew.set(m);//移動后(X,Y)float xm = event.getX();float ym = event.getY();//將移動后的位置設置到另一個矩陣(方法別弄錯)mNew.postTranslate(xm - xd, ym - yd);} else if (currentMode == MODE_TOW) {//移動后的距離double spa2 = spacing(event);PointF pointF = madPinte(event);//將比例設置到矩陣中float v1 = (float) (spa2 / spa);mNew.postScale(v1, v1, pointF.x, pointF.y);}break;case MotionEvent.ACTION_UP:break;}//將圖片的設置成新的矩陣MyImageView.setImageMatrix(mNew);return true;}});}//將計算兩個手指間的距離public double spacing(MotionEvent event) {float x = 0;float y = 0;x = event.getX(0) - event.getX(1);y = event.getY(0) - event.getY(1);return Math.sqrt(x * x + y * y);}//縮放的起點為點見得中點public PointF madPinte(MotionEvent event) {float x1 = event.getX(0);float x2 = event.getX(1);float y1 = event.getY(0);float y2 = event.getY(1);float x = (x1 + x2) / 2;float y = (y1 + y2) / 2;PointF pointF = new PointF(x, y);return pointF;}}總結
以上是生活随笔為你收集整理的android多点触控,图片的拖拽与放大缩小的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图片简单放大
- 下一篇: 通达信V6.1分时数据文件格式分析