Android应用中设置alpha值来制作透明与渐变效果的实例
作者:pku_android 发布时间:2021-06-16 14:27:17
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);
}
}


猜你喜欢
- 在c#中怎样调用VC写的OCX控件,主要有两个关键环节两个关键环节:导入ocx控件,创建实例。1 注册ocx:regsvr32.exe al
- 举例:存在一个类:Public Class Student{ public string name; public int age;}Stu
- using System;using System.Collections.Generic;using System.ComponentMo
- 观察者模式是软件设计模式中的一种,使用也比较普遍,尤其是在GUI编程中。关于设计模式的文章,网络上写的都比较多,而且很多文章写的也不错,虽然
- 前几天在这里分享了手写 sql 分页查询实现分页,现在来看看使用 mybatis 分页插件 pagehepler 来实现分页使用分页插件的原
- 概述关于 static 关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属 于某个对象的。也就是说,既
- Lombok简介和其他语言相比,Java经常因为不必要的冗长被批评。Lombok提供了一系列注解用以在后台生成模板代码,将其从你的类中删除,
- 本文实例为大家分享了Android Camera实现可复用相机组件的具体代码,供大家参考,具体内容如下若自己的应用需要使用camera,有两
- 场景:使用Fragment实现切页。类结构:一:ActivityActivity中使用getSupportFragmentManager()
- 1.情景展示将要访问的接口地址等常用的配置添加到properties文件中,比直接写到java类中的好处在于:当我们需要修改相应配置时,直接
- 实践过程效果代码public partial class Form1 : Form {
- C#异步方法返回void和Task的区别如果异步(async关键字)方法有返回值,返回类型为T时,返回类型必然是 Task<T>
- 本文实例讲述了散列表的原理与Java实现方法。分享给大家供大家参考,具体如下:概述符号表是一种用于存储键值对(key-value pair)
- 本文实例为大家分享了Android自定义View实现标签流效果的具体代码,供大家参考,具体内容如下一、概述Android自定义View实现标
- 延迟赋值主要有两点:1.一个参数可能或可能没被赋值.2.一个参数在一个函数中每次使用时可能被赋值.如下面的这种情况:int Add(int
- 1.通过无参构造函数创建(默认)2.通过有参构造创建1.constructor 的index赋值<bean id="user
- 函数式接口1.1 函数式接口概述函数式接口:有且仅有一个抽象方法的接口Java中的函数式编程体现就是Lambda表达式,所以函数式接口就是可
- 1. 抽象类是什么️给大家上一篇小作文,看完这个,你就理解了什么叫做抽象类在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不
- 本文实例为大家分享了Android自定义圆环倒计时控件的具体代码,供大家参考,具体内容如下先来一张最终效果图:主要思路: 在画渐变
- 时钟的使用1、声明VOID CALLBACK playproc( HWND hwnd, &nb