Flip Canvas倒置,同时保留onTouchEvent方法

时间:2013-12-14 06:30:36

标签: android rotation android-canvas

我通过在画布上绘制矩形来创建条形图。唯一的问题是图表是颠倒的。我尝试使用以下代码从一开始就翻转画布,但这会以一种奇怪的方式影响onTouchEvent方法:

public void onDraw(final Canvas canvas) {
            int width = super.getWidth();
            int height = super.getHeight();
                canvas.scale(1f, -1f,
                       width * 0.5f, height * 0.5f);
                mCanvas = canvas;
                super.onDraw(canvas);
....//more code after that

如果实施了上述代码,则图表会正确显示。然而,x&矩形的y坐标被反转。这意味着如果单击没有形状的画布顶部,onTouchEvent方法仍会被触发,因为如果未翻转画布,该点就是矩形所在的位置。

@Override
        public boolean onTouchEvent( MotionEvent event) {
             super.onTouchEvent(event);

                int x = (int)event.getX();
                int y = (int)event.getY();
                xStored = x; yStored=y;
                if (event.getAction()==MotionEvent.ACTION_UP){

               }else if(event.getAction()==MotionEvent.ACTION_DOWN){
                   System.out.println("Touching down!");
                   if(!drawNew){
                       for(Rect rect : rectangles){
                            if(rect.contains(x,y)){
                                System.out.println("Touched Rectangle, start activity."+x+","+y);
                                drawNew = true; 

                                invalidate();
                            }else{

                            }
                   }

                    }else{
                        drawNew = false; 

                        invalidate();
                    }
               }else if(event.getAction()==MotionEvent.ACTION_MOVE){

               }
              this.postInvalidate();
             return true;
          }

在保留onTouchEvent方法的同时翻转画布的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

事实证明,最好在画布上移动和旋转对象,而不是旋转画布本身。