android - Issue with getting GestureDetector to work with handleMessage -
my app shows bunch of bitmaps animate 1 one it's stored in bitmap array , when app starts curposition 0 start animating obj @ index 0. handlemessage animate each obj 1000ms delay between each obj when app starts first time , when app starts first time handlemessage animates each obj normally.
the issue once double tap restart button bitmap. used gesturedetector class , have restart button constructed via bitmap when listen ondoubletap , should happen handlemessage go thru each bitmap restarting animating them.
for reason, when double tap restart button bitmap, handlemessage running , know since put in logcat message , logcat message in update method see running thru each curposition mean line: log.i ("cur pos. far:", "" + curposition );
but don't visually see animation running thru update method unless interrupt app (i.e. close app or minimize resume app) , double tap restart button bitmap , double tapping restart button bitmap works once need interrupt app work again.
public class mainactivity extends activity implements gesturedetector.ongesturelistener, gesturedetector.ondoubletaplistener { private mysurfaceview mysurfaceview; private bitmap restart_buttonbitmap; private gesturedetector mgesturedetector; private miniproj2button restart; private miniproj2button newlevel; private final int size = 5; private final int delay = 1000; private bitmap[] myobjs = new bitmap[ size ]; //screen size info private int screenwidth; private int screenheight; //the size in pixels of place on game board private int blocksize; private int numblockswide; private int numblockshigh; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); mysurfaceview = new mysurfaceview(this); setcontentview(mysurfaceview); // create gesturedetector mgesturedetector = new gesturedetector(this, this); // attach listeners that'll called double-tap , related gestures mgesturedetector.setondoubletaplistener( ); }//end method: oncreate @override protected void onstop() { super.onstop(); log.d("onstop", "main activity's onstop called"); gameview.surfacedestroyed( mysurfaceview.getholder() ); this.finish(); } @override protected void onresume() { super.onresume(); log.d("onresume", "main activity's onresume called"); mysurfaceview = new mysurfaceview(this); setcontentview(mysurfaceview); mysurfaceview.surfacecreated( mysurfaceview.getholder() ); } @override protected void onpause() { super.onpause(); log.i("onpause", "main activity's onpause called"); mysurfaceview.surfacedestroyed( mysurfaceview.getholder() ); } @override public boolean ondoubletap(motionevent e) { //reset animation if restart button pressed! if ( restart.isbuttontouched(e.getx(), e.gety(), blocksize,blocksize) ) { curposition = 0; } return true; } public void configuredisplay() { //find out width , height of screen display display = getwindowmanager().getdefaultdisplay(); point size = new point(); display.getsize(size); screenwidth = size.x; screenheight = size.y; //determine size of each block/place on board // blocksize = screenwidth/10; blocksize = screenwidth/10; //determine how many blocks fit //height , width // numblockswide = 10; numblockswide = 10; numblockshigh = ( ( screenheight ) ) / blocksize; }//end method: configuredisplay @override public boolean ontouchevent(motionevent e) { mgesturedetector.ontouchevent(e); return super.ontouchevent(e); }//end ontouchevent class mysurfaceview extends surfaceview implements surfaceholder.callback, handler.callback { canvas canvas = new canvas(); surfaceholder surfaceholder;//this lets access canvas still need use canvas class handler myhandler; paint paint = new paint (); public mysurfaceview(context context) { super(context); paint.setcolor(color.argb(255, 0, 0, 0)); path = new path (); myhandler = new handler(this); getholder().addcallback(this); } @override public void surfacecreated(surfaceholder holder) { this.surfaceholder = holder; myhandler.sendemptymessage(0); } @override public void surfacechanged(surfaceholder holder, int format, int width, int height) { // enter here??? } @override public void surfacedestroyed(surfaceholder holder) { log.i("me", "surfacedestroyed: bye!" ); myhandler.removecallbacksandmessages(null); } protected void drawit ( ) { if ( surfaceholder.getsurface().isvalid() ) { canvas = surfaceholder.lockcanvas(); canvas.drawcolor(color.white);//the background //for each obj, draw surfaceholder.unlockcanvasandpost(canvas); }//end if block: valid surfaceholder }//end method: drawit public void update() { log.i ("cur pos. far:", "" + curposition ); if ( curposition < size ) { myobjs [ curposition ].animateme ( ); curposition++; } }//end method: update @override public boolean handlemessage(message msg) { if (curposition < size ) { log.i("still objs 2 animate","yes"); log.i ("cur pos. far:", "" + curposition ); gameview.update(); gameview.drawit(); myhandler.sendemptymessagedelayed(msg.what, delay); } else { myhandler.sendemptymessagedelayed(msg.what, 10); gameview.drawit(); } return true; }//end method: handlemessage }//end inner class: mysurfaceview }//end class: mainactivity
Comments
Post a Comment