Hi, I has a question for canvas. When I used canvas to do the picture
zoom in and move is ok, but when rotation before zoom in,
after zoom in to move has lag phenomenon, what's wrong? The
following is my code:

1. I was custom a view for canvas
      public class DrawImage extends View {
              public DrawImage(Context context) {
                      super(context);
                      photo = new BitmapDrawable(bmp);
                      setFocusable(false);
              }

              public void setBitmap(Bitmap bitmap){
                      photo = new BitmapDrawable(bitmap);
              }

              @Override
              protected void onDraw(Canvas canvas) {
                      super.onDraw(canvas);
                      Log.d(TAG,"onDraw");

                      photo.setBounds(getWidth()/2-zoomControler1,
getHeight()/2-
zoomControler2, getWidth()/2+zoomControler1, getHeight()/
2+zoomControler2);
                      canvas.translate(distanceX, distanceY);
                      canvas.rotate(degree, getWidth()/2, getHeight()/
2);
                      try{
                              photo.draw(canvas);
                      }catch(Exception e){
                              e.printStackTrace();
                      }
              }
      }


2. turn right function
      private void turn_right(){
              int temp;
              degree += 90;
              n++;
              if(degree % 180 == 0 ){
                      rotate_flag = true;
              }
              else{
                      rotate_flag = false;
              }
              degreeNum = degree/90;
              if(degreeNum == n){
                      temp = intScreenX;
                      intScreenX = intScreenY;
                      intScreenY = temp;
                      if(degreeNum%2 == 0){
                              displayPhoto(bmp);
                              flag = true;
                      }else{
                              rotatePhoto(bmp);
                              flag = false;
                      }
                      zoomControler1 = displayWidth/2;
                      zoomControler2 = displayHeight/2;

                      distanceX -= distanceX;
                      distanceY -= distanceY;
              }
      }

3.displayPhoto() and  rotatePhoto is compute the image boundarys

4. to do zoom in, I use onDoubleTap (intScreenX is screen width,
intScreenY is screen height
  bmp is loading the image, x_cent and y_cent is the screen central
point, image is custom view)

    @Override
    public boolean onDoubleTap(MotionEvent e)
    {
        if(bmp != null){
                if(touch_double){
                        big();
                        downX = e.getX();
                        downY = e.getY();
                        if(rotate_flag == true){
                                x_cent = ((intScreenX/
2+zoomControler1)-(intScreenX/2-
zoomControler1))/2 + (intScreenX/2-zoomControler1);
                                y_cent = ((intScreenY/
2+zoomControler2)-(intScreenY/2-
zoomControler2))/2 + (intScreenY/2-zoomControler2);
                        }
                        else{
                                y_cent = ((intScreenX/
2+zoomControler1)-(intScreenX/2-
zoomControler1))/2 + (intScreenX/2-zoomControler1);
                                x_cent = ((intScreenY/
2+zoomControler2)-(intScreenY/2-
zoomControler2))/2 + (intScreenY/2-zoomControler2);
                        }
                        image.invalidate();
                        touch_double = false;
                        isMove = true;
                }
                else{
                        small();
                        touch_double = true;
                        isMove = false;
                }
        }
        return false;
    }

5. big function (min_dist_t is top boundary, min_dist_d is down
boundary, min_dist_l is left boundary, min_dist_r is right boundary)
  private void big()
  {
              scalewidth = 1;
              scaleheight = 1;

              zoomControler_x = zoomControler1;
              zoomControler_y = zoomControler2;

              zoomControler1 = (int)(scalewidth*bmp.getWidth())/2;
              zoomControler2 = (int)(scaleheight*bmp.getHeight())/2;

              zoomControler_x = zoomControler1 / zoomControler_x;
              zoomControler_y = zoomControler2 / zoomControler_y;

              if(rotate_flag == true){
                      min_dist_t = (zoomControler2*2 - intScreenY)/2;
                      min_dist_d = (zoomControler2*2 - intScreenY)/2;
                      min_dist_l = (zoomControler1*2 - intScreenX)/2;
                      min_dist_r = (zoomControler1*2 - intScreenX)/2;
              }
              else{
                      min_dist_t = (zoomControler1*2 - intScreenX)/2;
                      min_dist_d = (zoomControler1*2 - intScreenX)/2;
                      min_dist_l = (zoomControler2*2 - intScreenY)/2;
                      min_dist_r = (zoomControler2*2 - intScreenY)/2;
              }
  }

6.move function (int this, the downX and downY is get touch event by
MotionEvent.ACTION_DOWN
moveX and moveY is get touch event by MotionEvent.ACTION_MOVE)


sorry, it's look a little disorderly, because I don't know how to ask!
Can anyone help me or tell me how solve after rotate to do zoom in and
move has lag?

-- 
unsubscribe: android-porting+unsubscr...@googlegroups.com
website: http://groups.google.com/group/android-porting

Reply via email to