Android - 旋转按钮内的图像

时间:2015-11-25 11:18:18

标签: android button android-animation

我想在点击按钮时旋转按钮内的图像。我尝试使用ImageView并且它可以工作,但出于可访问性目的,我需要使用Button而不是ImageView。

点击前:enter image description here

此处向下箭头是按钮背景。

点击后:enter image description here

单击按钮显示额外数据并旋转背景箭头。如何在点击时设置动画并旋转按钮背景?

参考布局代码:

Control []controls=this.Controls.Find("pictureBox" + resultValue.ToString(), true);
        if (controls != null && controls.Length > 0)
        {
            foreach (Control control in controls)
            {
                if (control.GetType() == typeof(PictureBox))
                {
                    PictureBox pictureBox = control as PictureBox;
                    pictureBox.BackColor = Color.FromArgb(r, g, b);
                }
            }
        }

2 个答案:

答案 0 :(得分:16)

最简单的方法是旋转整个按钮(正如Frank N. Stein在评论中建议的那样,ImageButton可能是最合适的,尽管没有什么可以阻止你使用不同的小部件)。

有几种方法可以旋转按钮,但ViewPropertyAnimator也可能是最简单的方法:

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        float deg = button.getRotation() + 180F;
        button.animate().rotation(deg).setInterpolator(new AccelerateDecelerateInterpolator());
    }
});

编辑顺便说一句,如果您希望箭头反转其原始动画,您可以尝试:

float deg = (button.getRotation() == 180F) ? 0F : 180F;

而不是float deg = button.getRotation() + 180F;

答案 1 :(得分:1)

您可以在按钮中将位图设置为背景。

Matrix matrix = new Matrix();

matrix.postRotate(90);

Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmapOrg,width,height,true);

Bitmap rotatedBitmap = Bitmap.createBitmap(scaledBitmap , 0, 0, scaledBitmap .getWidth(), scaledBitmap .getHeight(), matrix, true);

首先从任何来源获取位图,然后旋转它,然后在按钮中将其设置为背景。

BitmapDrawable bdrawable = new BitmapDrawable(context.getResources(),bitmap);
button.setBackground(bdrawable);