Android系統支援的顏色是由4個值組成的,前3個為RGB,也就是我們常說的三原色(紅、綠、藍),最後一個值是A,也就是Alpha。這4個值都在0~255之間。顏色值越小,表示該顏色越淡,顏色值越大,表示該顏色越深。如果RGB都是0,就是黑色,如果都為255,就是白色。Alpha也需要在0~255之間變化。Alpha的值越小,顏色就越透明,Alpha的值越大,顏色就不透明。當Alpha的值為0時,顏色完全透明,完全透明的位元影像或者圖形從View上消失。當Alpha的值為255時,顏色不透明。從Alpha的特性可知,設定顏色的透明度實際上就是設定Alpha值。
半透明:<Button android:background="#e0000000" ... />
透明:<Button android:background="#00000000" ... />
顏色和不透明度 (alpha) 值以十六進位標記法表示。任何一種顏色的值範圍都是 0 到 255(00 到 ff)。對於 alpha,00 表示完全透明,ff 表示完全不透明。運算式順序是“aabbggrr”,其中aa=alpha(00 到 ff);bb=blue(00 到 ff);gg=green(00 到 ff);rr=red(00 到 ff)。例如,如果您希望對某疊加層應用不透明度為 50% 的藍色,則應指定以下值:7fff0000
設定顏色的透明度可以通過Paint類的setAlpha方法來完成。因為做項目中,很多時候不需要讓照片完全透明的,所以實驗做了一個可以調節圖片透明度的程式。
例1
本例子通過一個滑杆(SeekBar)組件改變位元影像中顏色的Alpha值(透明度)。顯示位元影像的MyView類的代碼如下:
private class MyView extends View { private Bitmap bitmap; public MyView(Context context) { super(context); InputStream is =getResources().openRawResource(R.drawable.image); bitmap = BitmapFactory.decodeStream(is); setBackgroundColor(Color.WHITE); } @Override protected void onDraw(Canvas canvas) { Paint paint = new Paint(); paint.setAlpha(alpha); canvas.drawBitmap(bitmap, new Rect(0, 0, bitmap.getWidth(), bitmap .getHeight()), new Rect(10, 10, 310, 235), paint); } }
上面代碼中的drawBitMap方法的第2個參數表示原位元影像的複製地區,在本例中表示複製整個原位元影像。第3個參數表示繪製的目的地區域。
SeekBar組件的onProgressChanged時間方法的代碼如下:
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { alpha = progress; setTitle("alpha:" + progress); myView.invalidate(); }
運行本例,將滑杆移動到靠左和靠右的位置,將會看到如下面兩個圖的效果:
例2
Alpha透明漸層動畫 。
<alpha>標籤為alpha透明度節點
android:fromAlpha="1.0" 設定動畫起始透明度為1.0 表示完全不透明
android:toAlpha="0.0"設定動畫結束透明度為0.0 表示完全透明
也就是說alpha的取值範圍為0.0 - 1.0 之間
這個動畫布局設定動畫從完全不透明漸層到完全透明。
<?xmlversion="1.0"encoding="utf-8"?><alphaxmlns:android="http://schemas.android.com/apk/res/android" android:fromAlpha="1.0" android:toAlpha="0.0" android:repeatCount="infinite" android:duration="2000"></alpha>
代碼實現
import android.app.Activity; import android.os.Bundle; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ImageView; publicclass AlphaActivity extends Activity { /**顯示動畫的ImageView**/ ImageView mImageView = null; /**透明動畫**/ Animation mAnimation = null; @Override publicvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.translate); /**拿到ImageView對象**/ mImageView = (ImageView)findViewById(R.id.imageView); /**載入透明動畫**/ mAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha); /**播放透明動畫**/ mImageView.startAnimation(mAnimation); } }