Android的遮罩层(蒙板)效果 setXfermode

       Android的遮罩效果就是把一张图片盖在另一张图片的上面,通过控制任意一张图片的显示百分比实现遮罩效果。下面我使用两张一样的图片来实现一个类似于 Android 的progressbar 的填充效果。使用遮罩效果来实现progressbar的效果的好处是,我们可以只改变图片就可以更改progress的进度填充效果,并且我们可以实现任意形式的填充效果,就比如横竖填充,扇形逆/顺时填充针等。

      网上有很多介绍Android 遮罩效果的列子,但是都是横竖的填充效果,下面我来实现一个扇形填充效果,如下图:


    我现在要做的就是用这两种图去实现一个progressbar效果.好了原来不解释了直接上代码吧:

    一.Activity代码
package com.gplus.mask.test;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import com.gplus.mask.widget.MaskProgress;
import com.gplus.mask.widget.MaskProgress.AnimateListener;


public class GplusMask extends Activity{
	
	float progressFromCode  = 150;
	float progressFromXml  = 150;
	
	MaskProgress maskProgressFromeCode;
	MaskProgress maskProgressFromeXml;
	
	private boolean isAnimateFinish = true;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		RelativeLayout parent = (RelativeLayout) findViewById(R.id.parent);
		maskProgressFromeCode = new MaskProgress(this);
		initialProgress(maskProgressFromeCode);
		RelativeLayout.LayoutParams rp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 
				RelativeLayout.LayoutParams.MATCH_PARENT);
		parent.addView(maskProgressFromeCode, rp);
		maskProgressFromeCode.initial();
		
		maskProgressFromeXml = (MaskProgress) findViewById(R.id.maskView);
		
	}
	
	private void initialProgress(MaskProgress maskProgress){
		//设置最大值
		maskProgress.setMax(300);
		//初始填充量为一半
		//初始化填充progress时的填充动画时间,越大越慢
		maskProgress.setTotaltime(3);
		//progress背景图
		maskProgress.setBackgroundResId(R.drawable.untitled1);
		//progress填充内容图片
		maskProgress.setContentResId(R.drawable.untitled2);
		//Progress开始的填充的位置360和0为圆最右、90圆最下、180为圆最右、270为圆最上(顺时针方向为正)
		maskProgress.setStartAngle(0);
		maskProgress.setAnimateListener(animateListener);
		//初始化时必须在setMax设置之后再设置setProgress
		maskProgress.setProgress(175);
	}
	
	Handler handler = new Handler(){

		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);

			float newProgress = maskProgressFromeCode.getProgress() - 4;
			if(newProgress <= 0){//随机绘制效果
				
				float max = (float) (Math.random() * 900 + 1000);
				float progress = (float) (max * Math.random());
				
				maskProgressFromeCode.setMax(max);
				maskProgressFromeCode.setProgress(progress);
				maskProgressFro
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值