如果视图是RotationY(90),则MotionEvent.getX(int)对onTouchEvent不起作用

时间:2017-03-20 11:12:39

标签: android multi-touch

我正在测试多点触控

我希望在拖动视图时使用RotationY旋转视图。 一触即发,我用getRawX解决了它。 但是,当视图旋转时,我无法在多点触控中获得getRawX(其他pinters)值。 所以我使用了“MotionEvent.transForm(view.getMatrix())”。 这似乎有效。 但是,在RotationY(90)中存在坐标问题。

[Play Youtube]

Full source

   View single_touch, multi_touch;

float single_preX;
boolean isSingleStating = false;

float multi_preX1,multi_preX2;
boolean isMultiStating = false;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    single_touch = findViewById(R.id.single_touch);
    single_touch.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction() & MotionEvent.ACTION_MASK) {
                case MotionEvent.ACTION_MOVE:
                    if(isSingleStating){
                        float deltaX = event.getRawX() - single_preX;
                        single_touch.setRotationY(single_touch.getRotationY()+(int)(deltaX/3));
                    }
                    single_preX = event.getRawX();
                    isSingleStating = true;
                    break;
                case MotionEvent.ACTION_UP:
                    single_preX = 0f;
                    isSingleStating = false;

            }
            return true;
        }
    });


    multi_touch = findViewById(R.id.multi_touch);
    multi_touch.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction() & MotionEvent.ACTION_MASK) {
                case MotionEvent.ACTION_MOVE:
                    if(event.getPointerCount()!=2){
                        return false;
                    }
                    event.transform(multi_touch.getMatrix());
                    if(isMultiStating){
                        float deltaX = ((event.getX(0) - multi_preX1) + (event.getX(1) - multi_preX2))/2f;
                        multi_touch.setRotationY(multi_touch.getRotationY()+(int)(deltaX/3));

                    }
                    multi_preX1 = event.getX(0);
                    multi_preX2 = event.getX(1);
                    isMultiStating = true;
                    break;
                case MotionEvent.ACTION_UP:
                    multi_preX1 = 0f;
                    multi_preX2 = 0f;
                    isMultiStating = false;
            }
            return true;
        }
    });
}

谁能解决这个问题?
如果您解决了这个问题,请与我联系 电子邮件:markjmind@gmail.com

0 个答案:

没有答案