3

わかりました、これはばかげているように聞こえるかもしれませんが、なぜこれが更新されないのかを理解しようとして、しばらくの間キーボードに頭をぶつけていました。基本: 私は小さなサンプル アプリをテストして、ある点を中心に画像を X 度回転し、一度に 1 度ずつ表示して滑らかなアニメーションを作成できるかどうかを確認しています。だから私は、基本的に画像の回転をスライダーバー上のポイントに設定する、スライダーバーでうまく機能する素晴らしいサンプルを見つけました! しかし....乱数を使用してforループを作成しようとすると、for変数を使用して途中で画像を更新します...何もしません...そして最後に更新された画像だけが得られます...しかし、スライダーバーに指をドラッグすると、グラフィックが回転するとすぐに更新されます...ここで何が間違っているのかわかりません...

基本的に、この作品を見ると、ボタンの後ろで同じことをもう一度行いましたが、「リアルタイム」ではありません。view.invalidate() と view.postinvalidate() を呼び出して強制しようとしましたが、うまくいきません...

 @Override
   public void onProgressChanged(SeekBar seekBar, int progress,
     boolean fromUser) {
    // TODO Auto-generated method stub
    curRotate = (float)progress;
    drawMatrix();
   }

private void drawMatrix(){

    Matrix matrix = new Matrix();
       matrix.postScale(curScale, curScale);
       matrix.postRotate(curRotate);

       Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bmpWidth, bmpHeight, matrix, true);
       myImageView.setImageBitmap(resizedBitmap);

   }
4

3 に答える 3

1

あなたがしたことは次のようなものだったと思います:

for (int degrees = 0 ; degrees < maxRotation ; i++) {
    // perform the rotation by matrix
    myImageView.invalidate();
}

invalidate()メイン スレッドのイベント キューでのみ再描画をスケジュールするため、これは機能しません。これは、現在のコードがすべて実行された場合 (この場合は for サイクル) にのみ再描画が実行されることを意味します。

単純な回転には、トゥイーン アニメーションの方が適しています。より高度なもの (ゲーム アニメーションなど) については、カスタム ビューを作成するか、SurfaceView.

于 2011-04-04T16:06:45.653 に答える
0

画像を回転させるコードで UI スレッドをブロックしているようです。

私は今あなたに見せるコードを持っていません (返事を返してください、そして私が今夜家にいるときに役立つ何かを投稿することができます)、しかし yuo はおそらく AsyncTask に回転コードを配置することでより良い結果を得るでしょうPainless Threadingを参照してください詳細については、開発サイトの領域を参照してください。

于 2011-04-04T16:01:00.440 に答える
0

私は同じ問題を抱えていました、私は使用しました:

runOnUiThread(new Runnable() {
    public void run() {
    myImageView.setImageBitmap(image);
    imageView.invalidate();
    }
});
于 2011-12-14T16:16:33.590 に答える