Android应用中设置alpha值来制作透明与渐变效果的实例
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 之间
这个动画布局设置动画从完全不透明渐变到完全透明。
<?xml version="1.0" encoding="utf-8"?> <alpha xmlns: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; public class alphaactivity extends activity { /**显示动画的imageview**/ imageview mimageview = null; /**透明动画**/ animation manimation = null; @override public void 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); } }