Android中用手势的双击事件实现图片单击放大效果

该博客介绍了如何在Android应用中使用GestureDetector监听手势,通过实现OnGestureListener和OnDoubleTapListener接口,来分别处理单击和双击事件。在单击事件中,图片会放大1.2倍,而在双击事件中则显示提示信息。

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


原理:用手势对象的双击事件,分别实现单双击各自功能


public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener, View.OnTouchListener, GestureDetector.OnDoubleTapListener {


    private GestureDetector gestureDetector;
    private Matrix matrix;
    private ImageView imageView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView)findViewById(R.id.imageView);
//       给图片设置触摸事件
        imageView.setOnTouchListener(this);
//        得到手势对象,回调6方法
        gestureDetector = new GestureDetector(this,this);
//        给手势设置双击事件,回调3方法
        gestureDetector.setOnDoubleTapListener(this);

        


    }
    /**********************手势对象回调的方法***************************/
    /*
    * 按下时的回调方法,这里必须把返回值改为true,其他不改可以
    * */
    @Override
    public boolean onDown(MotionEvent e) {


        return true;
    }
    /*
    * 按下后短时间内无位移时回调方法
    * */
    @Override
    public void onShowPress(MotionEvent e) {


    }


    /*
    * 单击时回调
    * */
    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        return false;
    }


    /*
    * 手指滑动时回调
    * */
    @Override

 

    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {

 

 

 

        ViewCompat.setTranslationX(imageView,-distanceX + ViewCompat.getTranslationX(imageView));
        ViewCompat.setTranslationY(imageView,-distanceY + ViewCompat.getTranslationY(imageView));
        return false;
    }

    /*
    * 长按时回调,和onSingleTapUp()是互斥的
    * */
    @Override
    public void onLongPress(MotionEvent e) {


    }
    /*
    * 手指滑动屏幕后快速离开,屏幕还处于惯性滑动的状态时回调
    * */
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        return false;
    }


    /*
    * imageView.setOnTouchListener(this)的回调方法
    * */
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        MotionEvent obtain = MotionEvent.obtain(event);
        obtain.setLocation(event.getRawX(),event.getRawX());
        return gestureDetector.onTouchEvent(obtain);

    }
/*************************双击事件的回调方法***/
/*
* 确认是单击事件时回调
* */
    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        //每次若是单击事件的话就会把图片放大1.2倍
        ViewPropertyAnimatorCompat animate = ViewCompat.animate(imageView);
        animate.scaleXBy(1.2f).scaleYBy(1.2f).start();

        return false;
    }
    /*
    * 双击事件时回调
    * */


    @Override
    public boolean onDoubleTap(MotionEvent e) {
        return false;
    }
    /*
    * 双击事件
    * */
    @Override
    public boolean onDoubleTapEvent(MotionEvent e) {
        Toast.makeText(MainActivity.this, "双击事件", Toast.LENGTH_SHORT).show();
        return false;
    }

 

}

运行效果如下:

单击时:就会方法图片

双击时:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值