1

次のコードを使用して、ImageView のアルファ値を設定しています (これは、API 11 より前であっても、すべてのデバイスと互換性があるはずです)

AlphaAnimation alpha = new AlphaAnimation(0.85F, 0.85F);
alpha.setDuration(0); // Make animation instant
alpha.setFillAfter(true); // Tell it to persist after the animation ends
ImageView view = (ImageView) findViewById(R.id.transparentBackground);
view.startAnimation(alpha);

ただし、ジンジャーブレッド以下で実行されているデバイスでアプリを開くと、imageView は完全に透明ですが、ハニカム以上で実行されているデバイスでは、アルファ値が .85 に設定され、imageView が完全に表示されます。

ジンジャーブレッドでもこれを実現するにはどうすればよいですか?

4

3 に答える 3

2

これを機能させる簡単な方法は、Honeycomb アニメーション API を AlphaAnimation を含む古いバージョンに移植する NineOldAndroids プロジェクトを使用することです。http://nineoldandroids.com/を参照してください。

したがって、ObjectAnimator を使用すると、次のようになります。

ObjectAnimator.ofFloat(imageView, "alpha", .85f).start();
于 2013-02-27T05:07:32.933 に答える
0

それを行う関数があります(透明性を処理する新しいビューの一般的な方法のために廃止されましたが、Android 2.xで安全に使用できます):

myImageView.setAlpha(128); // range [0, 255]

ただし、カスタム アニメーションを実装する必要があります。これは、たとえばハンドラーを使用して実行できます。

Handler animationHandler = new Handler() {
   public void handleMessage(Message msg) {
       int currentAlpha = msg.arg1;
       int targetAlpha = msg.arg2;

       if (currentAlpha==targetAlpha) return;
       else {
           if (currentAlpha<targetAlpha) --currentAlpha;
           else ++currentAlpha;

           imageView.setAlpha(currentAlpha);

           sendMessageDelayed(obtainMessage(0, currentAlpha, targetAlpha), 10);
       }
   }
}


// Show imageview
animationHandler.sendMessage(animationHandler.obtainMessage(0, currentAlpha, 255));

// Hide imageview
animationHandler.sendMessage(animationHandler.obtainMessage(0, currentAlpha, 0));
  • 上記のコードはメモリ リーク セーフではありません (ハンドラーは静的であり、コンテキストとビューへの弱い参照を保持する必要があります)
  • アニメーションの速度を制御できるように改善する必要があります...
  • imageView には getAlpha メソッドがないため、現在のアルファを維持する必要があります。
于 2012-11-22T10:13:18.510 に答える