studio para moviles herramientas desarrollo crear con avanzado aplicaciones android canvas view ondraw

android - para - método onDraw no llamado en mi aplicación



herramientas de android studio pdf (1)

Estoy desarrollando una aplicación, en la que se llama a onDraw (). Estoy usando la siguiente lógica.

así que, por favor guía dónde cometí el error.

Actividad principal

public class Hello extends Activity implements SensorListener { private MyView myView; private SensorManager sensorManager; public void onAccuracyChanged(int paramInt1, int paramInt2) { } public void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); Log.e("hello", "hello"); this.myView = new MyView(this); setContentView(this.myView); this.sensorManager = ((SensorManager)getSystemService("sensor")); this.myView.setTheme(2); } protected void onResume() { super.onResume(); this.sensorManager.registerListener(this, 3, 0); } public void onSensorChanged(int paramInt, float[] paramArrayOfFloat) { switch (paramInt) { default: case 1: case 2: } this.myView.resetTama(); do { do return; while (Math.abs(paramArrayOfFloat[2]) <= 50.0F); } while (Math.abs(paramArrayOfFloat[0]) <= 15.0F); } public void onWindowFocusChanged(boolean paramBoolean) { super.onWindowFocusChanged(paramBoolean); if (paramBoolean) this.myView.init(); } }

Clase MyView

import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageButton; import android.widget.RelativeLayout; import android.widget.RelativeLayout.LayoutParams; import android.widget.TextView; import java.lang.reflect.Array; public class MyView extends RelativeLayout { private final int FP = -1; private final int WC = -2; public boolean disableApplication = false; private int imgType = 1; public boolean isBlack = false; boolean isInitialized; private Bitmap myBitmap; private Paint myPaint = new Paint(); private int[] numbers; private Tama[] oyatamaArray; private Tama[][] tamaArray; public MyView(Context paramContext) { super(paramContext); Log.e("MyView", "MyView"); setFocusable(true); setBackgroundResource(R.drawable.haikei); setWillNotDraw(false); this.myBitmap = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.tama); this.numbers = new int[6]; for (int i = 0; i<numbers.length; i++) { if (i >= this.numbers.length) { loadChangeThemeButton(paramContext); new TextView(paramContext).setBackgroundResource(R.drawable.bar); return; } this.numbers[i] = 0; } } private void changeBackgroundImage() { int i = 1 + this.imgType; this.imgType = i; if (i > 3) this.imgType = 1; setTheme(this.imgType); } private void loadChangeThemeButton(Context paramContext) { ImageButton localImageButton = new ImageButton(paramContext); localImageButton.setBackgroundResource(R.drawable.themebutton); RelativeLayout.LayoutParams localLayoutParams = new RelativeLayout.LayoutParams(-2, -2); localLayoutParams.addRule(9); localLayoutParams.addRule(12); localLayoutParams.setMargins(0, 0, 30, 30); addView(localImageButton, localLayoutParams); localImageButton.setOnClickListener(new View.OnClickListener() { public void onClick(View paramView) { MyView.this.changeBackgroundImage(); } }); } private Bitmap returnNumberImg(Resources paramResources, int paramInt) { switch (paramInt) { default: return BitmapFactory.decodeResource(paramResources, R.drawable.n0); case 1: return BitmapFactory.decodeResource(paramResources, R.drawable.n1); case 2: return BitmapFactory.decodeResource(paramResources, R.drawable.n2); case 3: return BitmapFactory.decodeResource(paramResources, R.drawable.n3); case 4: return BitmapFactory.decodeResource(paramResources, R.drawable.n4); case 5: return BitmapFactory.decodeResource(paramResources, R.drawable.n5); case 6: return BitmapFactory.decodeResource(paramResources, R.drawable.n6); case 7: return BitmapFactory.decodeResource(paramResources, R.drawable.n7); case 8: return BitmapFactory.decodeResource(paramResources, R.drawable.n8); case 9: } return BitmapFactory.decodeResource(paramResources, R.drawable.n9); } private void settingTamasTouchX(int paramInt1, int paramInt2) { int i = 0; if (i >= this.oyatamaArray.length); int k; for (int j = 0; ; j++) { if (j >= this.tamaArray.length) { return; } k = 0; if (k < this.tamaArray[j].length) { if (this.tamaArray[j][k].checkArea(paramInt1, paramInt2)); for (this.tamaArray[j][k].touchX = paramInt1; ; this.tamaArray[j][k].touchX = 0) { k++; break; } // break label90; } } } public void init() { int i = getHeight() / 7; int[] arrayOfInt = new int[6]; int j = 5; if (j < 0) this.oyatamaArray = new Tama[6]; int m; int i1 = 0; for (int k = 0; ; k++) { if (k >= this.oyatamaArray.length) { this.tamaArray = ((Tama[][])Array.newInstance(Tama.class, new int[] { 6, 4 })); m = 0; if (m < this.tamaArray.length) { for (int n = 0; ; n++) { if (n >= this.tamaArray[m].length) { m++; break; } this.tamaArray[m][n] = new Tama(40 + n * 37, arrayOfInt[m] - 32, n + m * 10); } // break label154; } i1 = 0; if (i1 < this.tamaArray.length) { for (int i2 = 0; ; i2++) { if (i2 >= this.tamaArray[i1].length) { i1++; break; } if (i2 != this.tamaArray[i1].length - 1) this.tamaArray[i1][i2].ueTama = this.tamaArray[i1][(i2 + 1)]; if (i2 == 0) continue; this.tamaArray[i1][i2].shitaTama = this.tamaArray[i1][(i2 - 1)]; } // break label222; } this.isInitialized = true; return; } this.oyatamaArray[k] = new Tama(279, arrayOfInt[k] - 32, k); this.oyatamaArray[k].isOya = true; } } @Override protected void dispatchDraw(Canvas canvas){ super.dispatchDraw(canvas); Log.e("......this.........","drawing"); } @Override protected void onDraw(Canvas paramCanvas) { super.onDraw(paramCanvas); Log.e("This on draw","....yes"); if (!this.isInitialized) init(); int i = 0; Resources localResources; int m; while (true) { int j; if (i >= this.oyatamaArray.length) { j = 0; if (j >= this.tamaArray.length) { localResources = getContext().getResources(); m = 0; if (m < 7) break; return; } } else { paramCanvas.drawBitmap(this.myBitmap, this.oyatamaArray[i].getX(), this.oyatamaArray[i].getY(), this.myPaint); i++; continue; } for (int k = 0; ; k++) { if (k >= this.tamaArray[j].length) { j++; break; } paramCanvas.drawBitmap(this.myBitmap, this.tamaArray[j][k].getX(), this.tamaArray[j][k].getY(), this.myPaint); } } if (this.numbers.length <= m) { for (Bitmap localBitmap = BitmapFactory.decodeResource(localResources, 2130837523); ; localBitmap = returnNumberImg(localResources, this.numbers[m])) { paramCanvas.drawBitmap(localBitmap, 8.0F, getHeight() / 2 + m * 18, this.myPaint); m++; break; } } } public boolean onTouchEvent(MotionEvent paramMotionEvent) { int i = (int)paramMotionEvent.getX(); int j = (int)paramMotionEvent.getY(); if ((paramMotionEvent.getAction() == 0) && (i >= 0) && (i <= 40) && (410 <= j) && (j <= 430)) changeBackgroundImage(); if (paramMotionEvent.getAction() == 0) settingTamasTouchX(i, j); if (1 == paramMotionEvent.getAction()) settingTamasTouchX(0, 0); int k; int m = 0; if (2 == paramMotionEvent.getAction()) { k = 0; if (k >= this.oyatamaArray.length) { m = 0; if (m < this.tamaArray.length) { for (int n = 0; ; n++) { if (n >= this.tamaArray[m].length) { m++; break; } this.tamaArray[m][n].checkAndSetArea(i, j); if (!this.tamaArray[m][n].isUp) continue; int[] arrayOfInt = this.numbers; arrayOfInt[m] = (1 + arrayOfInt[m]); } // break label164; } invalidate(); } } else { return true; } this.oyatamaArray[k].checkAndSetArea(i, j); if (this.oyatamaArray[k].isUp) this.numbers[k] = 5; while (true) { k++; break; } // label164: return disableApplication; } public void resetTama() { int j; for (int i = 0; ; i++) { if (i >= this.oyatamaArray.length) { j = 0; if (j < this.tamaArray.length) break; invalidate(); return; } this.oyatamaArray[i].moveX(this.oyatamaArray[i].startX); this.oyatamaArray[i].isUp = false; this.numbers[i] = 0; } for (int k = 0; ; k++) { if (k >= this.tamaArray[j].length) { j++; break; } this.tamaArray[j][k].moveX(this.tamaArray[j][k].startX); this.tamaArray[j][k].isUp = false; } } public void sensorChange(float[] paramArrayOfFloat) { int i = 0; if (paramArrayOfFloat[2] < -50.0F) i = 0 - 3; int k; while (true) { int j = 0; if (j >= this.oyatamaArray.length) { k = 0; if (k < this.tamaArray.length) break; if (i != 0) invalidate(); return; } else { this.oyatamaArray[j].moveX(i + this.oyatamaArray[j].getX()); if (this.oyatamaArray[j].isUp) this.numbers[j] = 5; while (true) { j++; break; } } } for (int m = 0; ; m++) { if (m >= this.tamaArray[k].length) { k++; break; } this.tamaArray[k][m].moveX(i + this.tamaArray[k][m].getX()); if (!this.tamaArray[k][m].isUp) continue; int[] arrayOfInt = this.numbers; arrayOfInt[k] = (1 + arrayOfInt[k]); } } public void setTheme(int paramInt) { Resources localResources = getContext().getResources(); if (paramInt == 1) { this.myBitmap = BitmapFactory.decodeResource(localResources, R.drawable.tama); setBackgroundResource(R.drawable.haikei); } while (true) { invalidate(); // return; if (paramInt == 2) { this.myBitmap = BitmapFactory.decodeResource(localResources, R.drawable.tama2); setBackgroundResource(2130837510); continue; } this.myBitmap = BitmapFactory.decodeResource(localResources, R.drawable.tama3); setBackgroundResource(2130837510); } } }

main.xml

<?xml version="1.0" encoding="utf-8"?> <FrameLayout android:id="@id/FrameLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" />


Pruebe a continuación funciona

A la pregunta publicada antes de editar.

Si está ampliando un ViewGroup, debe reemplazar a dispatchDraw() lugar de onDraw() .

Discusión sobre el tema @

https://groups.google.com/forum/?fromgroups=#!topic/android-developers/oLccWfszuUo

public class Hello extends Activity { private MyView myView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.onCreate(savedInstanceState); Log.e("hello", "hello"); this.myView = new MyView(this); setContentView(this.myView); } public class MyView extends RelativeLayout { private Paint myPaint = new Paint(); private int[] numbers; public MyView(Context paramContext) { super(paramContext); Log.e("MyView", "MyView"); setFocusable(true); setBackgroundResource(R.drawable.ic_launcher); } @Override protected void dispatchDraw(Canvas canvas){ super.dispatchDraw(canvas); Log.i("...............","drawing"); } } }

protected void dispatchDraw (Canvas canvas)

Llamado por sorteo para dibujar las vistas del niño. Esto puede ser anulado por las clases derivadas para ganar control justo antes de que sus hijos sean dibujados (pero después de que su propia vista haya sido dibujada).

Parámetros

lienzo del lienzo en el que dibujar la vista

Si onDraw en la llamada del constructor setWillNotDraw(false) entonces debería funcionar.

http://developer.android.com/reference/android/view/View.html#setWillNotDraw(boolean)

public MyView(Context paramContext) { super(paramContext); Log.e("MyView", "MyView"); setFocusable(true); setBackgroundResource(R.drawable.ic_launcher); setWillNotDraw(false); }