android 三指缩放回到桌面

之前在某车的中控台上看到三指缩放回到桌面,当时看到效果觉得挺酷的,今天心血来潮的想实现这个功能。

三指缩放主要涉及到的知识点有多点触控和事件分发,这两块内容大家应该都不陌生,网上的资料一堆堆的。

先上代码

switch (ev.getActionMasked()) {
    case MotionEvent.ACTION_POINTER_DOWN:
        if (ev.getPointerCount() == 3) {
            // 当有三个手指按在屏幕上时,计算三指之间的面积
            firstFingerDis = distanceBetweenFingers(ev);
        }
        break;
    case MotionEvent.ACTION_MOVE:
        if (ev.getPointerCount() == 3) {
            // 当有三个手指按在屏幕上滑动时,计算三指之间的面积
            lastFingerDis = distanceBetweenFingers(ev);
            if (firstFingerDis / lastFingerDis > 2) {
                Intent home = new Intent(Intent.ACTION_MAIN);
                home.addCategory(Intent.CATEGORY_HOME);
                startActivity(home);
                return true;
            }
        }
        break;
}

 MotionEvent.getActionMasked()是多点触控获取事件类型的方法,MotionEvent.getPointerCount(),获取当前触碰屏幕的手指个数,因为需要三指缩放,判断三个手指在屏幕才执行相对应逻辑,我这里通过计算三点之间的面积判断是否缩放。

计算三点面积

private double distanceBetweenFingers(MotionEvent event) {
    //0、1之间的距离
    float dis0_1X = Math.abs(event.getX(0) - event.getX(1));
    float dis0_1Y = Math.abs(event.getY(0) - event.getY(1));
    double disA = Math.sqrt(dis0_1X * dis0_1X + dis0_1Y * dis0_1Y);

    //1、2之间的距离
    float dis0_2X = Math.abs(event.getX(0) - event.getX(2));
    float dis0_2Y = Math.abs(event.getY(0) - event.getY(2));
    double disB = Math.sqrt(dis0_2X * dis0_2X + dis0_2Y * dis0_2Y);

    //1、2之间的距离
    float dis1_2X = Math.abs(event.getX(1) - event.getX(2));
    float dis1_2Y = Math.abs(event.getY(1) - event.getY(2));
    double disC = Math.sqrt(dis1_2X * dis1_2X + dis1_2Y * dis1_2Y);

    //利用海伦公式获取三角形的面积
    double s = (disA + disB + disC) / 2;//三角形周长一半
    return Math.sqrt(s * (s - disA) * (s -disB) * (s - disC));
}

根据事件的分发可知道,最先处理触摸事件是activity的dispatchTouchEvent,在源码中Activity的dispatchTouchEvent方法中加入此逻辑即可,然后编译android工程,烧写到开发版。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值