4

私はImageViewを持っています。onPostExecute でビットマップをロードした後、setImageDrawable を呼び出して imageView (CircleImageView を使用) を画像で埋めます。ただし、 TransitionDrawable は最初の画像のみを表示し、トランザクションは実行されません。これを機能させるにはどうすればよいですか?前もって感謝します。

private void setImageDrawable(ImageView imageView, Bitmap bitmap) {
            if (mFadeInBitmap) {
                BitmapDrawable drawable = null, placeholder = null;
                if (bitmap != null) {
                    drawable = new BitmapDrawable(mResources, bitmap);
                    placeholder = new BitmapDrawable(mResources, mPlaceHolderBitmap);
                }
                final TransitionDrawable td =
                            new TransitionDrawable(new Drawable[] {
                                placeholder,
                                drawable,
                        });

            imageView.setImageDrawable(td);
            td.startTransition(200);
        } else {
            imageView.setImageBitmap(bitmap);
        }
    }

更新: CircleImageView のドキュメントで、それがうまくいかない理由を見つけました)。

それで、フェードインアニメーションが適切に機能する円の画像を取得する方法を教えてもらえますか?

更新 2: 2 つの円の画像間のスムーズな移行を得るために私が見つけた回避策は、最初の画像をフェードアウトしてから、2 番目の画像をアニメーションでフェードインし、遅延ランナブルを投稿することです。コード例を次に示します。

フェードアウト.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true">
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.0"
        android:duration="100"
        android:interpolator="@android:anim/accelerate_interpolator"
        />
</set>

fade_in.xmlは、fromAlpha と toAlpha を場所ごとに変更する以外はほとんど同じです。その後、次のように、これらのアニメーションを円の画像ビューに適用します。

 Animation anim = AnimationUtils.loadAnimation(mContext, R.anim.fade_out);
 imageView.startAnimation(anim);
 final Handler handler = new Handler();

 handler.postDelayed(new Runnable() {

     @Override
     public void run() {
         imageView.setImageBitmap(value);//changing to different image ,here you will set image that you have loaded
         Animation anim = AnimationUtils.loadAnimation(mContext, R.anim.fade_in);
         imageView.startAnimation(anim);
      }

  }, 100);

それが役立つことを願っています。

4

1 に答える 1

2

私は次のコードを自分で試してみましたが、それが機能し、遷移がほとんど見えると言えます。

private void setImageDrawable(ImageView imageView) {
    Bitmap bitmap1 = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
    Bitmap bitmap2 = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
    new Canvas(bitmap1).drawRect(0, 0, 100, 100, mWhitePaint);
    new Canvas(bitmap2).drawRect(0, 0, 100, 100, mBlackPaint);

    BitmapDrawable drawable1 = new BitmapDrawable(getResources(), bitmap1);
    BitmapDrawable drawable2 = new BitmapDrawable(getResources(), bitmap2);
    TransitionDrawable transitionDrawable = new TransitionDrawable(new Drawable[] {drawable1, drawable2});
    imageView.setImageDrawable(transitionDrawable);
    transitionDrawable.startTransition(3000);
}

bitmapが ではなくnull、 と異なることを確認してくださいmPlaceHolderBitmap(これも であってはなりませんnull)。また、トランジション時間を 3 秒に設定してみてください。たとえば、200 ミリ秒ではトランジション自体を確認するには速すぎるためです。

于 2015-07-17T16:40:30.257 に答える