Переверните холст в обратном порядке, сохраняя метод onTouchEvent

Я создал гистограмму, рисуя прямоугольники на холсте. Единственная проблема заключается в том, что график перевернут. Я попытался использовать следующий код, чтобы сбрасывать холст с самого начала, но это влияет на метод 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 ответ

Оказывается, что лучше перемещать и поворачивать объект на холсте, а не поворачивать сам холст.

licensed under cc by-sa 3.0 with attribution.