1

i am developing an application, in that onDraw() is called. i am using the following logic.

so, please guide where i did the mistake.

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 class

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"
   />
koti
  • 1,071
  • 3
  • 15
  • 35
  • Change this `public class MyView extends RelativeLayout` to `public class MyView extends View` and give it a try – Raghunandan Jul 03 '13 at 06:17
  • Thankyou for your quick response, but it is also not working – koti Jul 03 '13 at 06:21
  • http://stackoverflow.com/questions/6378904/extending-relativelayout-and-overriding-dispatchdraw-to-create-a-zoomable-vie. this will help override `dispatchdraw` if you extend Relative layout. If you extend View onDraw should work – Raghunandan Jul 03 '13 at 06:25
  • http://developer.android.com/reference/android/view/ViewGroup.html#dispatchDraw(android.graphics.Canvas). Look at the view hierachy at the top of the link. – Raghunandan Jul 03 '13 at 06:28

1 Answers1

1

Try the below it works

To the question posted before edit.

If you're extending a ViewGroup you should override dispatchDraw() instead of onDraw().

Discussion on the topic @

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)

Called by draw to draw the child views. This may be overridden by derived classes to gain control just before its children are drawn (but after its own view has been drawn).

Parameters

canvas the canvas on which to draw the view

If you Override onDraw inthe constructor call setWillNotDraw(false) then it should work.

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); 
      }
Raghunandan
  • 132,755
  • 26
  • 225
  • 256
  • @koti the above works fine for me tested. post your update code. i am 100% sure it should work if you do it right. – Raghunandan Jul 03 '13 at 06:59
  • ok, in my application some other logics also included. can i send my code to your mail. – koti Jul 03 '13 at 07:01
  • post it here itself. also create a seperate project and give the above a try. – Raghunandan Jul 03 '13 at 07:01
  • @koti the problem might be in other parts of the code. the code above works fine. test it as a new project just with the above code. – Raghunandan Jul 03 '13 at 07:06
  • @Koti that's a huge chunk of code. pls narrow it down to the relevant ones. it takes lot of time looking at your code. – Raghunandan Jul 03 '13 at 07:09
  • its works fine as a separate project, but not works in my application. – koti Jul 03 '13 at 07:16
  • @koti then there is a problem with other parts of the code. pls post a new question and role back your question to the previous edit. – Raghunandan Jul 03 '13 at 07:17
  • @koti to your previous question the answer posted works. pls edit your question to the previous state and start a new thread. Also post the relevant part of the codes only. Nobody will try to look at the entire code. It takes lot of time. Put some break points and debug your code. – Raghunandan Jul 03 '13 at 07:20