Problems with redrawing canvas with touch

Problems with Canvas, OpenGL, etc...

Problems with redrawing canvas with touch

Postby ghostcloud » Thu Mar 22, 2012 10:25 am

I don't know if its possible to get a smoother movements of my bitmaps when using canvas. I'm creating a menu with bitmaps that are touch and drag-able. My problem is that they wont follow my touch movements, it feels if i move fast they cant follow the update of the movements. I want to have more accurate update to the draw but haven't found a way yet to do this.

I have tried some things in the touch event call but without any success.

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.         @Override
  2.         protected void onDraw(Canvas canvas) {
  3.                 canvas.drawColor(Color.WHITE);
  4.                 for(MenuButton menuButton : menuButtonSprites) {
  5.                         menuButton.onDraw(canvas);
  6.                 }
  7.         }
  8.  
  9.         @Override
  10.         public boolean onTouchEvent(MotionEvent event) {
  11.                         float x = event.getX();
  12.                         float y = event.getY();
  13.                         try {
  14.                                 switch (event.getAction()) {
  15.                                 case MotionEvent.ACTION_DOWN:
  16.                                         synchronized (holder) {
  17.                                                 for(MenuButton mb : menuButtonSprites){
  18.                                                         if(mb.isButtonTouched(x, y)) {
  19.                                                                 mb.setButtonState(true);
  20.                                                                 moveMenuButton = mb;
  21.                                                                 moveDirection = y;
  22.                                                         }
  23.                                                 }
  24.                                         }
  25.                                         break;
  26.                                 case MotionEvent.ACTION_MOVE:
  27.                                         synchronized (holder) {
  28.                                                 if (moveMenuButton !=null) {
  29.                                                         moveMenuButton.update((int)y);
  30.                                                 }
  31.                                         }
  32.                                         break;
  33.                                 case MotionEvent.ACTION_UP:
  34.                                         synchronized (holder) {
  35.                                                 if (moveMenuButton !=null){
  36.                                                         moveMenuButton.setButtonState(false);
  37.                                                 }
  38.                                                 moveMenuButton = null;
  39.                                         }
  40.                                         break;
  41.                                 }
  42.                         }
  43.                         catch(Exception e){
  44.                         }
  45.                        
  46.                 return true;   
  47.         }
  48. }      
Parsed in 0.035 seconds, using GeSHi 1.0.8.4


Here is my thread for updating physics and draw

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.         @Override
  2.         public void run() {
  3.         long ticksPS = 1000 / FPS;
  4.         long startTime;
  5.         long sleepTime;
  6.         Canvas c = null;
  7.  
  8.         while (running) {
  9.                 startTime = System.currentTimeMillis();
  10.                 try {
  11.                         c = view.getHolder().lockCanvas();
  12.                         synchronized (view.getHolder()) {
  13.                                 view.onDraw(c);
  14.                         }
  15.                 }
  16.                 finally {
  17.                         if (c != null) {
  18.                                 view.getHolder().unlockCanvasAndPost(c);
  19.                         }
  20.                 }
  21.  
  22.                 sleepTime = ticksPS - (System.currentTimeMillis() - startTime);
  23.                 try {
  24.                         if (sleepTime > 0)
  25.                                 sleep(sleepTime);
  26.                         else
  27.                                 sleep(10);
  28.                 }
  29.                 catch (Exception e) {
  30.                 }
  31.         }
  32.         }
Parsed in 0.034 seconds, using GeSHi 1.0.8.4


And finally some code for my bitmap object that i draw.

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1. public void update(int y){
  2.                 if(menuButtonPressed)
  3.                 {
  4.                         this.yPosistion = y;
  5.                         menuButtonRectangle.set(xMin, yPosistion-yMin, xMax, yPosistion+yMax);
  6.                 }
  7.         }
  8.        
  9.         public void onDraw(Canvas canvas){
  10.                 canvas.drawBitmap(menuButton, null, menuButtonRectangle, null);
  11.         }
Parsed in 0.034 seconds, using GeSHi 1.0.8.4


Any suggestions that I might be missing or how i can speed this up? I'm going to include even more effects to the menu using bitmaps to shadow the menu, but first i want to make a smoother movement of my bitmaps. Is this impossible to do with canvas and should i try to move over to OpenGL instead?

Thx guys!
ghostcloud
Once Poster
Once Poster
 
Posts: 1
Joined: Thu Mar 22, 2012 9:56 am

Top

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

Who is online

Users browsing this forum: No registered users and 4 guests