600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > android多点触控 图片的拖拽与放大缩小

android多点触控 图片的拖拽与放大缩小

时间:2023-10-28 18:06:14

相关推荐

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;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。