Painting Thread Problem!

Problems with Canvas, OpenGL, etc...

Painting Thread Problem!

Postby DeBuGGeR » Sun Feb 06, 2011 1:34 pm

I am fairly new developer and trying to make a live wallpaper app. Among many animations, my first target is to show a rotating Bitmap which is actually a Black Hole.

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. public class Painting extends Thread {
  3.        
  4.         /** Reference to the View and the context */
  5.         private SurfaceHolder surfaceHolder;
  6.         private Context context;
  7.        
  8.         /** State */
  9.         private boolean wait;
  10.         private boolean run;
  11.        
  12.         /** Dimensions */
  13.         private int width;
  14.         private int height;
  15.        
  16.         /** Time tracking */
  17.         private long previousTime;
  18.        
  19.         boolean first = true;
  20.        
  21.         Bitmap hole;
  22.        
  23.         int degree;
  24.         public Painting(Context con , SurfaceHolder surf)
  25.         {
  26.                 context = con;
  27.                 surfaceHolder = surf;
  28.                 this.wait = true;
  29.                 Log.i("Live Test","UnInitialized");
  30.                 Drawable d = (con.getResources().getDrawable(R.drawable.vlack));
  31.                 hole = ((BitmapDrawable)d).getBitmap();
  32.                 hole.prepareToDraw();
  33.                 if(hole != null)
  34.                 Log.i("Live Test","Initialized");
  35.                 run = true;wait = false;
  36.                 degree = 0;
  37.  
  38.         }
  39.        
  40.         @Override
  41.         public void run()
  42.         {
  43.                 while (run) {
  44.                         this.run = true;
  45.                         Canvas c = null;
  46.                        
  47.                        
  48.                         Log.i("Live Test","Draw Color");
  49.                         while (run) {
  50.                                 try {
  51.                                         c = this.surfaceHolder.lockCanvas();
  52.                                         synchronized (this.surfaceHolder) {
  53.                                                 doDraw(c);
  54.                                         }
  55.                                 } finally {
  56.                                         if (c != null) {
  57.                                                 this.surfaceHolder.unlockCanvasAndPost(c);
  58.                                                 Log.i("Live Test","Unlocked And Posted");
  59.                                         }
  60.                                 }
  61.                                 // pause if no need to animate
  62.                                 synchronized (this) {
  63.                                         if (wait) {
  64.                                                 try {
  65.                                                         wait();
  66.                                                 } catch (Exception e) {
  67.                                                         Log.i("Live Test","Error wait");
  68.                                                 }
  69.                                         }
  70.                                 }
  71.                         }
  72.                 }
  73.                        
  74.         }
  75.        
  76.         public void setSurfaceSize(int width, int height) {
  77.                 this.width = width;
  78.                 this.height = height;
  79.                 synchronized(this) {
  80.                         this.notify();
  81.                 }
  82.         }
  83.        
  84.                
  85.         private void doDraw(Canvas canvas) {
  86.                 if(first)
  87.                 {
  88.                         canvas.save();
  89.                         canvas.drawColor(0x60444444);
  90.                         canvas.drawBitmap(hole, 80,80,null);
  91.                         canvas.restore();
  92.                         first = false;
  93.                 }
  94.                 else
  95.                 {
  96.                 long currentTime = System.currentTimeMillis();
  97.                 long elapsed = currentTime - previousTime;
  98.                 if (elapsed > 20) {
  99.                
  100.                 canvas.save();
  101.                 degree+= 5;
  102.                 if(degree>359)degree = degree -358;
  103.                 canvas.rotate((float) degree);
  104.                 canvas.restore();
  105.                 Log.i("Live Test","rotated");
  106.                 }
  107.                 previousTime = currentTime;
  108.         }
  109. }
  110. }
  111.  
Parsed in 0.040 seconds, using GeSHi 1.0.8.4



So I am trying to rotate the bitmap and show it again so it looks like its sucking and all.
Also I have removed Basic onPause onResume Functions so that you guys can understand the code easily. I know there is something basic I am missing, but What?
DeBuGGeR
Freshman
Freshman
 
Posts: 2
Joined: Sun Dec 19, 2010 4:10 pm

Top

Re: Painting Thread Problem!

Postby wakawaka » Thu Feb 10, 2011 1:15 pm

I am also facing same problem. Any pointer to solve this.
Android Development Tutorials and Code Snippets: http://forum.gssdaily.com/
wakawaka
Experienced Developer
Experienced Developer
 
Posts: 79
Joined: Tue Jan 11, 2011 1:51 pm

Top

Return to Android 2D/3D Graphics - OpenGL Problems

Who is online

Users browsing this forum: No registered users and 1 guest