I have an Android app that updates the screen every 33 milliseconds, displaying a rectangle in a pair of coordinates. Here is the code for the custom view:
import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.os.Handler; import android.util.AttributeSet; import android.view.SurfaceHolder; import android.view.SurfaceView; public class OurView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder holder; private Handler handler = new Handler(); private Bitmap testimg; private int xCoord = 500; private int yCoord = 500; boolean running = false; int xPos; int yPos; public OurView(Context context) { super(context); init(); } public OurView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public OurView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { holder = getHolder(); holder.addCallback(this); testimg = BitmapFactory.decodeResource(getResources(),R.drawable.testimg); } void moveImage(int xChange, int yChange) { this.xCoord = this.xCoord + xChange; this.yCoord = this.yCoord + yChange; } void doDraw(Canvas canvas) { xPos = this.xCoord + (testimg.getWidth()/2); yPos = this.yCoord + (testimg.getHeight()/2); canvas.drawARGB(255, 55, 255, 255); canvas.drawBitmap(testimg, xPos, yPos, null); } @Override public void surfaceCreated(final SurfaceHolder holder) { running = true; while(running){ handler.postDelayed(new Runnable() { public void run() { Canvas canvas = getHolder().lockCanvas(); if(canvas != null){ synchronized (getHolder()) { doDraw(canvas); } holder.unlockCanvasAndPost(canvas); } } }, 33); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {} @Override public void surfaceDestroyed(SurfaceHolder holder) {} }
I had a separate thread that processed the drawing, but this caused problems with variables having different values between the threads. When I run this program, I get this error:
04-20 10:54:35.577 1925-1931/com.thatoneprogrammerkid.gameminimum I/art﹕ Thread[2,tid=1931,WaitingInMainSignalCatcherLoop,Thread*=0xae668400,peer=0x12c00080,"Signal Catcher"]: reacting to signal 3 04-20 10:54:35.577 1925-1931/com.thatoneprogrammerkid.gameminimum I/art﹕ [ 04-20 10:54:35.627 1925: 1931 W/art ]
source share