2012-11-22 49 views
1

我使用以下代碼來設置的ImageView的alpha值(這應該是與所有設備兼容,即使預API 11)設定阿爾法值的ImageView

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的是完全透明的,但是,在蜂窩或更高運行裝置中,阿爾法值被設定爲0.85,並完美顯示ImageView的。

如何才能做到這一點的薑餅呢?

回答

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)); 
  • 上面的代碼是不是內存泄漏安全(處理程序應該是靜態的,並應保持上下文和弱引用的觀點
  • 你應該改進它,使控制動畫速度,...
  • 你需要保持當前alpha左右,因爲ImageView的沒有一個getAlpha方法。
+0

如何讓自定義動畫?你可以舉個例子 – Ankush

+0

見編輯答案。你應該擁有你所需要的一切。現在你必須進行實驗,改正並改進它。 –

+0

我想'setAlpha(持續時間)'是不是可用,直到API級別11? –

0

好吧,讓我們創建一個自定義的ImageView的,它解決了這個問題,通過在騎的onDraw :)

AlphaImageView.java

package com.example.shareintent; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.util.AttributeSet; 
import android.widget.ImageView; 

public class AlphaImageView extends ImageView { 

    public AlphaImageView(Context context) { 
     super(context); 
    } 

    public AlphaImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public AlphaImageView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public void onDraw(Canvas canvas){ 
     canvas.saveLayerAlpha(0, 0, canvas.getWidth(), canvas.getHeight(), 0x66, Canvas.HAS_ALPHA_LAYER_SAVE_FLAG); 
     super.onDraw(canvas); 
    } 

} 

您的活動XML

<com.example.shareintent.AlphaImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="52dp" 
     android:layout_marginTop="50dp" 
     android:src="@drawable/ic_launcher" /> 
+0

我得到一個錯誤說 - 從類型ImageView的方法setAlpha(INT)已被棄用 – Ankush

+0

沒有奏效。它設置ImageView的不透明每個設備 – Ankush

+0

好上,ifound通過創建自定義的ImageView的解決方案。 – Talha

2

一個簡單的方法來得到這個工作是使用NineOldAndroids項目,港口的蜂窩動畫API回到舊版本,包括AlphaAnimation。見http://nineoldandroids.com/

因此,使用ObjectAnimator會是這樣的:

ObjectAnimator.ofFloat(imageView, "alpha", .85f).start();