2013-07-03 3 views
1

Я разрабатываю приложение, в котором вызывается onDraw(). Я использую следующую логику.метод onDraw, не вызванный в моем приложении

так, пожалуйста, руководство, где я сделал ошибку.

MainActivity

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(); 
    } 
} 

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" 
    /> 
+0

Изменить этот 'общественного класса MyView распространяется RelativeLayout' на' общественного класса MyView расширяет View' и дать ему попробовать – Raghunandan

+0

Thankyou за ваш быстрый ответ, но это тоже не работает – koti

+0

HTTP://stackoverflow.com/questions/6378904/extending-relativelayout-and-overriding-dispatchdraw-to-create-a-zoomable-vie. это поможет переопределить 'dispatchdraw', если вы добавите Relative layout. Если вы расширяете View onDraw, то должны работать – Raghunandan

ответ

1

Попробуйте Белу w it works

К вопросу, который был опубликован перед редактированием.

Если вы расширяете ViewGroup, вы должны переопределить dispatchDraw() вместо onDraw().

Обсуждение на тему @

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)

Вызывается ничьей, чтобы привлечь взгляды ребенка. Это может быть переопределено производными классами, чтобы получить контроль непосредственно перед тем, как его дети будут нарисованы (но после того, как его собственный вид был нарисован).

Параметры

холст холст, на котором рисовать мнение о

Если вы Override onDraw Inthe вызова конструктора setWillNotDraw(false) то он должен работать.

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); 
     } 
+0

Я использовал все вышеперечисленное, все еще моя проблема не исправлена ​​.. – koti

+0

@ koti выше работает отлично для меня проверено. разместите свой код обновления. я на 100% уверен, что он должен работать, если вы это сделаете правильно. – Raghunandan

+0

ОК, в моем приложении также включены некоторые другие логики. могу ли я отправить свой код на вашу почту. – koti

Смежные вопросы