2011-10-21 26 views
0

下面的代码用于以相同的速度旋转两个图像,我想以不同的速度旋转两个图像,我想在我的应用程序中使用两个画布,如何在此应用程序中添加两个画布以便(canvas.rotate(方向,宽度/ 2,高度/ 2);)我可以以不同的速度旋转两个图像。谢谢以不同的速度旋转两个图像

public class Rotate extends ImageView { 
    Paint paint; 
    int direction = 0; 
    int degree = 0; 
    int rot; 
    private float x; 
    private float y; 
    private float centerX; 
    private float centerY; 
    private float newX; 
    private float newY; 
    boolean rotation = false; 
    private Bitmap mBitmap; 
    private Bitmap mWood; 
    private Bitmap icon, mBitmap1, rollerDesk; 
    private Canvas ball2Rotate; 
    private Bitmap ball; 
    Bitmap rollerBitmap; 



    public Rotate(Context context) { 
     super(context); 

     paint = new Paint(); 
     paint.setColor(Color.BLUE); 
     paint.setStrokeWidth(2); 
     paint.setStyle(Style.STROKE); 


     Options opts = new Options(); 
     opts.inDither = true; 
     opts.inPreferredConfig = Bitmap.Config.RGB_565; 

     mWood = BitmapFactory.decodeResource(getResources(), 
       R.drawable.newwood, opts); 

     Bitmap ball = BitmapFactory.decodeResource(getResources(), 
       R.drawable.roller); 
     mBitmap = Bitmap.createScaledBitmap(ball, 50, 50, true); 

     Bitmap icon = BitmapFactory.decodeResource(getResources(), 
       R.drawable.ball, opts); 
     mBitmap1 = Bitmap.createScaledBitmap(icon, 50, 50, true); 

     rollerBitmap = BitmapFactory.decodeResource(getResources(), 
       R.drawable.imagesnic, opts); 
     rollerDesk = Bitmap.createScaledBitmap(rollerBitmap, 400, 400, true); 

     this.setImageResource(R.drawable.casinonic); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 

     int height = this.getHeight(); 
     int width = this.getWidth(); 
     ball2Rotate = canvas; 
     final Bitmap bitmap = mBitmap; 
     final Bitmap bitmap1 = mBitmap1; 

     centerX = width/2; 
     centerY = height/2; 
     canvas.drawBitmap(mWood, 0, 0, null); 
     canvas.drawBitmap(bitmap, width/2, height/2, paint); 

     ball = bitmap1; 
//  rotateball(canvas, bitmap1); 

     canvas.rotate(direction, width/2, height/2); 
//  canvas.rotate(direction, width/2, height/2); 
     super.onDraw(canvas); 
     this.invalidate(); 

     canvas.drawBitmap(rollerDesk, width/12, height/4, paint); 
     canvas.drawBitmap(bitmap1, 220, 160, paint); 

     if (rotation) { 
      direction += rot; 
      rot = rot + 1; 

      Log.d("Direction values in ONDRAW" + direction, "Rotation values " 
        + rot); 
      if (rot == 100) { 
       rotation = false; 

      } 
     } 
    } 

    private void rotateball(Canvas canvas, Bitmap bitmap1) { 

     canvas.drawBitmap(bitmap1, newX + 220, newY + 400, paint); 

    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 

     if (event.getAction() == MotionEvent.ACTION_DOWN) { 

      x = event.getX(); 
      y = event.getY(); 
      System.out.println("x and y coordinates" + x + y); 
      newX = centerX - x; 
      newY = centerY - y; 
      rotation = false; 
      updateRotation(newX, newY); 

     } else if (event.getAction() == MotionEvent.ACTION_MOVE) { 

      x = event.getX(); 
      y = event.getY(); 

      newX = centerX - x; 
      newY = centerY - y; 
      rotation = false; 
      updateRotation(newX, newY); 

     } else if (event.getAction() == MotionEvent.ACTION_UP) { 

      x = event.getX(); 
      y = event.getY(); 

      newX = centerX - x; 
      newY = centerY - y; 
      rot = 0; 
      rotation = true; 

      updateRotation(newX, newY); 

     } 
     return true; 
    } 

    private void setDirection1(int degree2) { 


     for (int j = 0; j < 10; j++) { 

      this.direction = degree2; 

      degree2 += 5; 

     } 
     this.invalidate(); 

    } 

    private void updateRotation(float newX2, float newY2) { 

     degree = (int) Math.toDegrees(Math.atan2(newY, newX)); 

     setDirection1(degree); 

    } 

} 

回答

0

简单为什么你不使用相同的画布?

canvas.save(); 
canvas .rotate(rotationAngleForBitmap1); 
canvas .drawBitmap(bitmap, matrix, paint); 
canvas .restore(); 
canvas .rotate(rotationAngleForBitmap2); 
canvas .drawBitmap(bitmap2, matrix, paint) 
canvas .restore(); 
+0

我想同时旋转两个图像 – Sharana

0

以下是Android中模拟时钟的代码,它使用相同的画布和旋转功能。希望这会对你有所帮助。请让我知道你是否需要完整的代码。

@Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     boolean changed = mChanged; 
     if (changed) { 
      mChanged = false; 
     } 
     boolean seconds = mSeconds; 
     if (seconds) { 
      mSeconds = false; 
     } 
     int availableWidth = 200; 
     int availableHeight = 200; 

     int x = availableWidth/2; 
     int y = availableHeight/2; 

     final Drawable dial = mDial; 
     int w = dial.getIntrinsicWidth(); 
     int h = dial.getIntrinsicHeight(); 

     boolean scaled = false; 

     if (availableWidth < w || availableHeight < h) { 
      scaled = true; 
      float scale = Math.min((float) availableWidth/(float) w, 
            (float) availableHeight/(float) h); 
      canvas.save(); 
      canvas.scale(scale, scale, x, y); 
     } 

     if (changed) { 
      dial.setBounds(x - (w/2), y - (h/2), x + (w/2), y + (h/2)); 
     } 
     dial.draw(canvas); 

     canvas.save(); 
     canvas.rotate(mHour/12.0f * 360.0f, x, y); 
     final Drawable hourHand = mHourHand; 
     if (changed) { 
      w = hourHand.getIntrinsicWidth(); 
      h = hourHand.getIntrinsicHeight(); 
      hourHand.setBounds(x - (w/2), y - (h/2), x + (w/2), y + (h/2)); 
     } 
     hourHand.draw(canvas); 
     canvas.restore(); 

     canvas.save(); 
     canvas.rotate(mMinutes/60.0f * 360.0f, x, y); 
     //canvas.rotate(mSecond, x, y); 
     final Drawable minuteHand = mMinuteHand; 
     if (changed) { 
      w = minuteHand.getIntrinsicWidth(); 
      h = minuteHand.getIntrinsicHeight(); 
      minuteHand.setBounds(x - (w/2), y - (h/2), x + (w/2), y + (h/2)); 
     } 
     minuteHand.draw(canvas); 
     canvas.restore(); 
     canvas.save(); 
     canvas.rotate(mSecond, x, y); 

     //minuteHand = mMinuteHand; 
     if (seconds) { 
      w = mSecondHand.getIntrinsicWidth(); 
      h = mSecondHand.getIntrinsicHeight(); 
      mSecondHand.setBounds(x - (w/2), y - (h/2), x + (w/2), y + (h/2)); 
     } 
     mSecondHand.draw(canvas); 
     canvas.restore(); 
     if (scaled) { 
      canvas.restore(); 
     } 
    } 
+0

嗨Maneesh是啊,我需要完整的代码 – Sharana

+0

我上传相同谷歌code..will让你知道做一次 – Maneesh

+0

感谢这部分的代码 – Sharana