如何用multiTouch在Activity上调整字体

来源:互联网 发布:.lol域名注册 编辑:程序博客网 时间:2024/04/28 14:35

这两天在做一个feature: 在一个Activity中通过两个手指的multi touch来调整字体的大小。activity中主要包含一个ListView,Button和EditText。

1, 要写一个ScaleDetector, 具体可以参照ScaleGestureDetector.java去写,不能直接使用此Detector的原因是因为它把所有的MotionEvent都拦截了,这样,Acitivity中的view就接收不到click等event了。

2, 在Activity中dispatchTouchEvent函数中去拦截,而不是在onTouchEvent中,因为onTouchEvent是当所有view没有处理此TouchEvent时才能到达。如果Activity中所有的view都是非Clickable的,也是可以的, 如ImageView 和TextView。

    @Override    public boolean  dispatchTouchEvent(MotionEvent event){        Log.e("dispatchTouchEvent", "event = " + event.getActionMasked());        boolean ret = false;        if(mScaleDetector != null){            ret = mScaleDetector.onTouchEvent(event);        }        return super.dispatchTouchEvent(event);    }


 

3, 因为ScaleDetector拦截不了ACTION_DOWN,所以当我们在gesture时,如果down时手指落在了button上或者ListView的Item上,都会有onPressed的效果产生,甚至会有onContextMenu产生。所以当我们检测到要开始gesture时,需要取消先前的ACTION。

    //send ACTION_CANCEL to cancel previous actions before ACTION_POINTER_DOWN    MotionEvent cancel = MotionEvent.obtain(0, 0, MotionEvent.ACTION_CANCEL, 0, 0, 0);    getWindow().superDispatchTouchEvent(cancel);

原创粉丝点击