Android onDraw () ejecutándose en todas las vistas?

Aquí hay un comportamiento extraño que no entiendo acerca de las vistas personalizadas. Tengo dos vistas en una disposición del marco, una encima de la otra. Las vistas son simples y he hecho sólo para una prueba corta

public class View1 extends View { .... @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN){ this.updateDrawings(); } return true; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (canvas != null) { Log.i("Test", "Draw View1"); } } public void updateDrawings() { try { this.invalidate(); } finally { } } } 

Y View2

 public class View2 extends View { .... @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (canvas != null) { Log.i("Test", "Draw View2"); } } public void updateDrawings() { try { this.invalidate(); } finally { } } } 

Todo bien embalado en un FrameLayout

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:background="#ffffff"> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"> <com.View2 android:layout_centerInParent="true" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginBottom="5dip" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"> <com.View1 android:layout_centerInParent="true" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginBottom="5dip" /> </LinearLayout> </FrameLayout> 

Mi pregunta es: ¿por qué cuando onTouch se ejecuta desde View1, se ejecuta el método onDraw () de la vista? ¿Por qué no sólo View1?

Posteriormente Edit View2 tiene una imagen grande para dibujar, la imagen se rota y se escala de acuerdo con algunas preferencias guardadas. Normalmente, cuando inicie la actividad, View2.onDraw () se encarga de girar, traducir y escalar el mapa de bits y dibujarlo en el lienzo. Cuando el usuario toca View1 sólo quiero que View1.onDraw () se ejecute porque no hay ningún punto para volver a dibujar la misma imagen de fondo una y otra vez para cada interacción del usuario. ¿Cómo puedo detener la ejecución de View2.onDraw ()?

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.