2

TouchImageViewを使用しており、onDoubleTapズームを実装したいと考えています...これまでのところ非常に優れています。

問題は:

スケールアニメーションを適用してsetFillAfter(false)を設定すると、AnimationListener.onAnimationEndで、正しいマトリックスがimageviewに適用され、すべてが期待どおりに機能します(スクロール、その他のズームジェスチャなど)。->しかし-画面に小さなちらつきが見られます(理解できること-アニメーションが最初に戻って、その後マトリックスの変更が適用されるため)

反対側では、setFillEnabled(true)の場合、アニメーションは見栄えが良く、ちらつきはありませんが、どういうわけかビューが完全に台無しになっています。最初はすべてが見栄えがしますが、最大および最小ズームレベルが完全に台無しになっています。ズームアウトできません。もう最初のズームに移動し、画像の移動も期待どおりに機能しません-境界線は間違っていますか?そんな感じ)

だから私たちの質問;)?
--setFillAfter(true)を使用したScaleAnimationは実際に何をしますか?
-(完全な)イメージビューのサイズは変更されますか?
-何が問題なのですか:/?

いつものようにあなたの助けに感謝します:=)乾杯、

// BTW:これはすべてのAndroidバージョン<= 4で発生しますが、4.1では説明されている問題は発生せず、すべてが期待どおりに機能します。

---------------
更新:
現在のコードはこのように機能しますが(ズームでは問題ありません)、マトリックスの設定とアニメーションのクリアの間に小さな「ちらつき」があります(ただし)コードは、アニメーションがクリーンアップされる前にマトリックスを適用する必要があることを示しているので、シームレスな移行を望んでいました...返信
をお待ちしております!

            Log.v("TouchImageView", "Zoom in");
            ScaleAnimation zoomIn = new ScaleAnimation(saveScale, SCALE_DOUBLE_TAP, saveScale, SCALE_DOUBLE_TAP, width / 2, height / 2);
            zoomIn.setDuration(200);
            zoomIn.setFillAfter(true);
            zoomIn.setAnimationListener(new AnimationListener() {

                @Override
                public void onAnimationStart(Animation animation) {
                    isAnimating = true;
                    saveScale = SCALE_DOUBLE_TAP;
                    right = width * saveScale - width - (2 * redundantXSpace * saveScale);
                    bottom = height * saveScale - height - (2 * redundantYSpace * saveScale);
                }

                @Override
                public void onAnimationRepeat(Animation animation) {

                }

                @Override
                public void onAnimationEnd(Animation animation) {
                    isAnimating = false;
                    matrix.postScale(SCALE_DOUBLE_TAP, SCALE_DOUBLE_TAP, width / 2, height / 2);
                    matrix.getValues(matrixValues);
                    setImageMatrix(matrix);
                    clearAnimation();
                }
            });


            startAnimation(zoomIn);
4

1 に答える 1

5

setFillAfter(true)実際にスケーリングされているように偽装します。マトリックススケーリングと組み合わせて使用​​ することをお勧めします。アニメーションの最後に、マトリックスを適用し、アニメーションが適用された をclearAnimation()呼び出します。Viewこれでちらつきが修正されるはずです。

于 2012-10-26T15:54:36.523 に答える