android 触摸手指动作放大和缩小图片

private RelativeLayout root;
    private ImageView moveImage;
    float lastDestance=-1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        root= (RelativeLayout) findViewById(R.id.Main_Activity);
        moveImage = (ImageView) findViewById(R.id.moveImage);

        root.setOnTouchListener(new View.OnTouchListener() {    //侦听控件的触摸事件
            @Override
            public boolean onTouch(View v, MotionEvent event) {


                float currentDestance;

                switch (event.getAction())
                {
                    case MotionEvent.ACTION_DOWN ://监听点击一个点
                        System.out.println("按下");
                        break;
                    case MotionEvent.ACTION_MOVE ://触摸移动 手指移动时

                        if (event.getPointerCount()>=2)
                        {

                            float offSetX =event.getX(0)-event.getX(1);//获取
                            float offSetY =event.getY(0)-event.getY(1 );
                            currentDestance = (float) Math.sqrt(offSetX*offSetX+offSetY*offSetY);//获取两点间距离 然后运用勾股定理 算出两个手指点之间的距离

                            System.out.println(lastDestance);
                            if (lastDestance<0) {

                                System.out.println("初始化变量");
                                System.out.println(currentDestance);
                               lastDestance= (float)currentDestance;//将第一次获取的两点距离  复制给lastDestance
                                System.out.println(lastDestance);
                            }
                            else {
                                System.out.println("进入手指动作判断");
                                if (currentDestance-lastDestance>5)
                                {
                                    System.out.println("手势 放大");
                                    RelativeLayout.LayoutParams lv= (RelativeLayout.LayoutParams) moveImage.getLayoutParams();

                                    lv.width = (int) (1.1f*moveImage.getWidth());//每一次两点间的距离放大 将图片的高和宽 分别*1.1 不停的放大
                                    lv.height = (int) (1.1f*moveImage.getHeight());
                                    moveImage.setLayoutParams(lv);//将每次放大的距离复制个image的高和宽
                                    lastDestance =currentDestance;//将这一次的两点间距离赋值给lastDestance  以便每次比较
                                }
                                else if (lastDestance-currentDestance>5){

                                    System.out.println("手势 缩小");
                                    RelativeLayout.LayoutParams lv= (RelativeLayout.LayoutParams) moveImage.getLayoutParams();

                                    lv.width = (int) (0.9f*moveImage.getWidth());//当两点间的距离在不断的缩小时
                                    lv.height = (int) (0.9f*moveImage.getHeight());
                                    moveImage.setLayoutParams(lv);
                                    lastDestance =currentDestance;
                                }
                            }

                        }


                        break;
                    case MotionEvent.ACTION_UP ://手指离开屏幕事件
                        System.out.println("弹起");
                        break;
                    default:
                        System.out.println("无");
                        break;

                }
                return true;
            }
        });


    }
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android触摸放大缩小功能可以通过实现GestureDetector类来实现。以下是一个简单的示例代码: ```java public class MyView extends View { private Paint paint; private Bitmap bitmap; private float scaleFactor = 1.0f; private GestureDetector gestureDetector; public MyView(Context context) { super(context); init(); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { paint = new Paint(); bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image); gestureDetector = new GestureDetector(getContext(), new MyGestureListener()); } @Override public boolean onTouchEvent(MotionEvent event) { gestureDetector.onTouchEvent(event); return true; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.save(); canvas.scale(scaleFactor, scaleFactor); canvas.drawBitmap(bitmap, 0, 0, paint); canvas.restore(); } private class MyGestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onScale(ScaleGestureDetector detector) { scaleFactor *= detector.getScaleFactor(); scaleFactor = Math.max(0.1f, Math.min(scaleFactor, 5.0f)); invalidate(); return true; } } } ``` 在这个示例中,我们使用了GestureDetector和ScaleGestureDetector来实现放大缩小功能。我们在MyView类中重写了onTouchEvent()方法来接收触摸事件,然后将事件传递给gestureDetector处理。在MyGestureListener类中,我们重写了onScale()方法,该方法在用户进行放大缩小手势时被调用,我们在此方法中更新scaleFactor变量,然后调用invalidate()方法强制视图重新绘制。最后,在onDraw()方法中,我们调用canvas.scale()方法来缩放画布,然后绘制位图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值