1

私のアプリでは、ファイルパスから画像を編集する機能を提供しています。次に、アニメーションで画像の向きを変更して保存する機能を追加したいと思います。

向きを変更することはできますが、アニメーションを追加する方法がわかりません。

これが私のコードです。

ImageView img;
Bitmap bmp;
Bitmap rotatedBMP;
String imageFilePath="";
File imgFile;
public void rotate(){
    if(rotatedBMP == null){
        if(imgFile != null && imgFile.exists())
            bmp = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
    }else
        bmp = rotatedBMP;
    // Getting width & height of the given image.
            int w = bmp.getWidth();
            int h = bmp.getHeight();
            Matrix mtx = new Matrix();
            mtx.preRotate(90);
            rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, w, h, mtx, true);
            /*BitmapDrawable bmd = new BitmapDrawable(rotatedBMP);
            img.setImageDrawable(bmd);*/
            img.setImageBitmap(rotatedBMP);
}
4

1 に答える 1

1

ビューを回転させてアニメーション化したいという欲求と、実際のビットマップを回転させて保存したいという欲求の間には矛盾があります。

画像ビューを回転させたい場合はonDraw、アニメーションの更新ステップを含むメソッドでキャンバスを回転させるか、Android のヘルパーを使用することをお勧めしますRotateAnimation。例が必要な場合は、コメントをお送りください。

これは、アニメーション フレームごとに新しいビットマップを作成しないため、非常にコストがかかるため、「良い方法」です。

ただし、保存するために、ビューだけでなくビットマップ自体も回転させたいという競合があります。アニメーションのすべてのステップではないので、これは問題ありません。

したがって、ビットマップに適用したいユーザーが選択した変換をできるだけ遅く保存する必要があります。次に、ビューをアニメーション化しますが、ユーザーに応じて適切です。保存時に、ファイルへの書き込み時にすべてのユーザー変換を連結します。または、アニメーション化のアイデアをあきらめます。

私の実装のアイデアは、2 番目のマトリックスをローカルに保存し、各ユーザー入力でキャンバス変換そのマトリックスの両方を更新することです。次に、保存ボタンが押されたときと同じようにビットマップを「取得」し、それを更新された変換マトリックスに適用します。

リクエストに応じて喜んで詳しく説明します。

いくつかの情報源

Android: imageview 内の画像をある角度で回転します (多くのビットマップを作成する際の問題についても言及しています)

Android でのビューの回転(gauravjain0102 の回答は過小評価されています!)

于 2013-09-24T14:06:29.210 に答える