web-dev-qa-db-ja.com

ボタンをクリックするたびにimageviewで画像を回転させる方法は?

これはJavaコードです。画像ギャラリーから画像を取得しています。1つのボタンと1つのImageViewがあります。1回だけ回転しています。もう一度ボタンをクリックすると、画像が回転しません。

public class EditActivity extends ActionBarActivity
{
private Button rotate;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_edit);
    rotate=(Button)findViewById(R.id.btn_rotate1);
    imageView = (ImageView) findViewById(R.id.selectedImage);
    String path = getIntent().getExtras().getString("path");
    final Bitmap bitmap = BitmapFactory.decodeFile(path);
    imageView.setScaleType(ImageView.ScaleType.FIT_XY);
    imageView.setImageBitmap(Bitmap.createScaledBitmap(bitmap, 510, 500,
            false));
    rotate.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
          {                  
            imageView.setRotation(90);


        }
    });



}
10
user2095748

onClick()メソッドをに変更します

@Override
public void onClick(View v)
{                  
    imageView.setRotation(imageView.getRotation() + 90);
}

docs の内容に注意してください

ビューがピボットポイントを中心に回転する角度を設定します。 値を増やすと時計回りに回転します。


RotateAnimationを使用して、Gingerbread(v10)以下を実行しているAndroidデバイスもターゲットにしている場合に、同じ効果を実現する方法を示すために、回答を更新したいと思います。

private int mCurrRotation = 0; // takes the place of getRotation()

上記のように回転角度を追跡するインスタンスフィールドを導入し、次のように使用します。

mCurrRotation %= 360;
float fromRotation = mCurrRotation;
float toRotation = mCurrRotation += 90;

final RotateAnimation rotateAnim = new RotateAnimation(
        fromRotation, toRotation, imageview.getWidth()/2, imageView.getHeight()/2);

rotateAnim.setDuration(1000); // Use 0 ms to rotate instantly 
rotateAnim.setFillAfter(true); // Must be true or the animation will reset

imageView.startAnimation(rotateAnim);

通常、XMLを介してそのような アニメーションの表示 を設定できます。ただし、そこで絶対度の値を指定する必要があるため、前の回転に基づいて完全な円を完成させるのではなく、連続する回転が繰り返されます。したがって、上記のコードでそれを行う方法を示すことにしました。

31
Ravi Thapliyal