【问题标题】:android spinning imageandroid旋转图像
【发布时间】:2010-06-29 11:30:34
【问题描述】:

我正在尝试创建两个旋转轮,就像滑轮一样,所以每次连接的绳索移动时,两个滑轮都会旋转。我尝试了两种方法:

1) 在 View 类的 onDraw() 方法中使用 Matrix.postRotate,该方法调用如下:

private void drawSpinningWheel(Canvas canvas)
{
    try
    {
        canvas.save();

            Bitmap bitmapOrg = null;

        int iDrawable = R.drawable.spinning_button;

        bitmapOrg = BitmapFactory.decodeResource(getResources(), iDrawable);

        if(bitmapOrg != null)
        {
            int width = bitmapOrg.getWidth(); 
            int height = bitmapOrg.getHeight(); 
            int newWidth = 24; 
            int newHeight = 24; 

            // calculate the scale - in this case = 0.4f 
            float scaleWidth = ((float) newWidth) / width; 
            float scaleHeight = ((float) newHeight) / height; 

            // createa matrix for the manipulation 
            Matrix matrix = new Matrix(); 
            // resize the bit map 
            matrix.postScale(scaleWidth, scaleHeight); 
            matrix.postRotate((float) mDegrees++);

            Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, 
                    width, height, matrix, true); 

            canvas.drawBitmap(resizedBitmap, matrix, null);

        }

        canvas.restore();
    }
    catch(Exception e)
    {
        Log.e(TAG + "drawSpinningWheel", e.getMessage());
    }

}

但看起来图像不仅旋转而且围绕另一个轴旋转

2) 使用 SurfaceView 和一个单独的线程,在 run() 中调用这个:

    private void doDraw(Canvas canvas) {
        // Draw the background image. Operations on the Canvas accumulate
        // so this is like clearing the screen.
        canvas.drawBitmap(mBackgroundImage, 0, 0, null);

        int yTop = mCanvasHeight - ((int) mY + mSpinningWheelImageHeight / 2);
        int xLeft = (int) mX - mSpinningWheelImageWidth / 2;

...

        // Draw the ship with its current rotation
        canvas.save();
        canvas.rotate((float) mHeading++, (float) mX, mCanvasHeight
                - (float) mY);

            mSpinningWheelImage.setBounds(xLeft, yTop, xLeft + mSpinningWheelImageWidth, yTop
                    + mSpinningWheelImageHeight);
            mSpinningWheelImage.draw(canvas);


        canvas.restore();
    }

我让纺车工作,但我无法添加另一个纺车。我什至尝试为第二个纺车创建另一个线程,但只有一个出现。有人能指出我正确的方向吗?谢谢。

3) 好的,现在我也尝试了 RotateAnimation:

公共类 GraphicsView 扩展视图 { 私有静态最终字符串 QUOTE = “没有人再使用 Java。这是一个重量级的大球和链条。”;

private Animation anim;
private Animation anim2;

private Bitmap jobs;
private Bitmap wheel;

private int jobsXOffset;        
private int jobsYOffset;

private int wheelXOffset;        
private int wheelYOffset;

public GraphicsView(Context context) 
{
    super(context);
    jobs = BitmapFactory
    .decodeResource(getResources(), R.drawable.spinning_button);

    jobsXOffset = jobs.getWidth() / 2;
    jobsYOffset = jobs.getHeight() / 2;

    wheel = BitmapFactory
    .decodeResource(getResources(), R.drawable.wheel);

    wheelXOffset = jobs.getWidth() / 2;
    wheelYOffset = jobs.getHeight() / 2;


}

private void createAnim(Canvas canvas) 
{
    anim = new RotateAnimation(0, 360, canvas.getWidth() / 2, canvas
            .getHeight() / 2);
    anim.setRepeatMode(Animation.INFINITE);
    anim.setRepeatCount(Animation.INFINITE);
    anim.setDuration(10000L);
    anim.setInterpolator(new AccelerateDecelerateInterpolator());

    startAnimation(anim);
}

private void createAnim2(Canvas canvas) 
{
    anim2 = new RotateAnimation(0, 360, canvas.getWidth() / 2+30, canvas
            .getHeight() / 2);
    anim2.setRepeatMode(Animation.INFINITE);
    anim2.setRepeatCount(Animation.INFINITE);
    anim2.setDuration(10000L);
    anim2.setInterpolator(new AccelerateDecelerateInterpolator());

    startAnimation(anim);
}

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

    // creates the animation the first time
    if (anim == null) {
        createAnim(canvas);
    }

    int centerX = canvas.getWidth() / 2;
    int centerY = canvas.getHeight() / 2;

    canvas.drawBitmap(jobs, centerX - jobsXOffset,
            centerY - jobsYOffset, null);

    canvas.drawBitmap(wheel, centerX - wheelXOffset + 30,
            centerY - wheelYOffset, null);

}

}

但结果与 Canvas.Rotate 相似,我能够使第一张图像旋转良好,但第二张图像将简单地围绕第一张图像旋转,尽管我注意到第二张图像实际上也在旋转。看起来我需要一个单独的视图来查看第二张图片,我希望避免这种情况,因为我不确定如何让轮子旋转,但连接的绳子不会旋转。

【问题讨论】:

    标签: android image spinning


    【解决方案1】:

    你试过RotateAnimation吗?

    【讨论】:

    • 我做了,它只围绕上/左角旋转。我找不到让它围绕我的drawable中心旋转(旋转)的设置。你能提供一些细节吗?
    【解决方案2】:

    查看我的问题及其答案,我认为这是您(和我)正在寻找的... How to spin an android icon on its center point?

    我放了三个动画,我的标志文本和我的标志图标。然后我在文本上放负旋转,在图标上放正。这很简单但很酷。我的问题的答案有代码清单。

    【讨论】:

      猜你喜欢
      • 2021-01-03
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多