1. 程式人生 > >android 如何設定圖片顏色的透明度

android 如何設定圖片顏色的透明度

作者:田仁智

      Android系統支援的顏色是由4個值組成的,前3個為RGB,也就是我們常說的三原色(紅、綠、藍),最後一個值是A,也就是Alpha。這4個值都在0~255之間。顏色值越小,表示該顏色越淡,顏色值越大,表示該顏色越深。如果RGB都是0,就是黑色,如果都為255,就是白色。Alpha也需要在0~255之間變化。Alpha的值越小,顏色就越透明,Alpha的值越大,顏色就不透明。當Alpha的值為0時,顏色完全透明,完全透明的點陣圖或者圖形從View上消失。當Alpha的值為255時,顏色不透明。從Alpha的特性可知,設定顏色的透明度實際上就是設定Alpha值。

       設定顏色的透明度可以通過Paint類的setAlpha方法來完成。因為做專案中,很多時候不需要讓照片完全透明的,所以試驗做了一個可以調節圖片透明度的程式。

       本例子通過一個滑桿(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();

    }

執行本例,將滑桿移動到靠左和靠右的位置,將會看到如下面兩個圖的效果: