下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中怎么利用Xfermode实现动态文字加载动画
这篇文章将为大家详细讲解有关Android中怎么利用Xfermode实现动态文字加载动画,文章内容质量较高,因此在下分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。第一步:我们要熟悉一下这个图16个图形结果,其实现在有18中。这个图我们也不用记,只要在用的时候选择对应得我们的目标图形就行了。具体怎么使用我们要引出我们今天主要的类PorterDuffXfermode这个类就是我们的Xformode的类了,他还有另外被废弃的两兄弟,被废弃了就不谈了。既然是各类我们要使用就要创建对象,如下:PorterDuffXfermode
xfermode
=
new
PorterDuffXfermode(PorterDuff.Mode.SRC_IN);这里就是我们的对象,在这里他的构造参数中就是我们上图选择的类型,最终图形是两个图形的交集部分。当然你可以根据你的目标图形的效果自己选择,两个图片的混排类型。这就是第一步,我们只要了解一下图片的意义,和PorterDuffXfermode这个类的用法就够了。我这里提到的所有图不只是图片,还有我们绘制出来的圆,矩形等绘制的图。第二步:我们了解了图形混排的模式,所以第二步我们要有两个图,不然怎么混排,从图中我们可以看出这两个图,分别是Src,Dst。接下来我会介绍这两个名字对应我们手机上那个图形。因为我们要画图所以我们就要来到ondraw()方法了,这个方法有个类叫canvas图层,所以这就到了我们第二步的关键点:那就是设置图层,调用方法canvas.saveLayer(
left,
top,
right,
bottom,
paint,
saveFlags)首先前四个方法比较简单,就是我们要设置这个图层的大小,第5个方法就是我们的画笔,第6个方法我们使用:Canvas.ALL_SAVE_FLAG
,这是一个flag。注意:我们在绘制图形之前必须调用上面的方法,不然没有效果。下面是这个绘制的先后顺序:/**
*
设置图层
*/
int
layer
=
canvas.saveLayer(0,0,w,h,paint,Canvas.ALL_SAVE_FLAG);
//绘制背景图片
canvas.drawBitmap(bitmap,0,0,paint);
//设置
xformode
模式
paint.setXfermode(xfermode);
//绘制矩形
paint.setColor(Color.RED);
RectF
rectF
=
new
RectF(0,y,bitmap.getWidth(),bitmap.getHeight());
canvas.drawRect(rectF,paint);
//最后设置为空
paint.setXfermode(null);
canvas.restoreToCount(layer);第三步:第三步我们还是围绕着上边的代码讲,因为就这几行代码,因为很简单。设置好图层之后,就要绘制图形了,我们这里用canvas绘制了一个bitmap图片。大家注意了我们此时用的paint只是普通的画笔,到这个时候我们的PorterDuffXfermode模式还没有使用呢!再往下看我们的画笔调用了:paint.setXfermode(xfermode);这个方法,所以如果我们再绘制图形的画,再用到的画笔就和我们之前绘制的图形不一样了。这个方法可以说是一个分界点,在这个方法之前绘制的图形和之后绘制的图形就分别对应了我们图中Src和Dst的图。这就决定我们最终的目标图形是什么样的。最后就是把画笔的xformode模式设置为空。再调用canvas的这个方法canvas.restoreToCount(layer);我们的绘制就结束了。我这里使用动画动态的改变了矩形的高度。我把这个图片贴给大家,图片还是盗别人的。哈哈。大家可以下载使用。把代码也贴出来,大家参考。以上都是我个人的理解,包括给大家举的例子,如果有不妥之处请指出,谢谢。public
class
XformodeView
extends
View
{
Paint
paint
;
//屏幕宽高
int
w;
int
h;
//定义一个矩形的高度变化
float
y;
//xformode
的
类型
选择
PorterDuffXfermode
xfermode
=
new
PorterDuffXfermode(PorterDuff.Mode.SRC_IN);
//图片
Bitmap
bitmap;
public
XformodeView(Context
context)
{
this(context,null);
}
public
XformodeView(Context
context,
@Nullable
AttributeSet
attrs)
{
this(context,attrs,0);
}
public
XformodeView(Context
context,
@Nullable
AttributeSet
attrs,
int
defStyleAttr)
{
super(context,
attrs,
defStyleAttr);
//画笔
paint
=
new
Paint();
paint.setAntiAlias(true);
paint.setDither(true);
init(context);
}
/**
*
初始化
*
@param
context
*/
public
void
init(Context
context){
//获得屏幕宽高
WindowManager
wm
=
(WindowManager)
context.getSystemService(Context.WINDOW_SERVICE);
w
=
wm.getDefaultDisplay().getWidth();
h
=
wm.getDefaultDisplay().getHeight();
//加载bitmap
图片
bitmap
=
BitmapFactory.decodeResource(context.getResources(),
R.mipmap.xxx);
//开始动画
animator();
}
/**
*
测量view
*/
@Override
protected
void
onMeasure(int
widthMeasureSpec,
int
heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec,
heightMeasureSpec);
setMeasuredDimension(bitmap.getWidth(),bitmap.getHeight());
}
@Override
protected
void
onDraw(Canvas
canvas)
{
super.onDraw(canvas);
/**
*
绘制
图片
剪切
画布
控制图片显示
*/
//
Path
path
=
new
Path();
//
path.moveTo(0,y);
//
//
path.lineTo(bitmap.getWidth(),y);
//
path.lineTo(bitmap.getWidth(),bitmap.getHeight());
//
path.lineTo(0,bitmap.getHeight());
//
canvas.clipPath(path);
/**
*
设置图层
*/
int
layer
=
canvas.saveLayer(0,0,w,h,paint,Canvas.ALL_SAVE_FLAG);
//绘制背景图片
canvas.drawBitmap(bitmap,0,0,paint);
//设置
xformode
模式
paint.setXfermode(xfermode);
//绘制矩形
paint.setColor(Color.RED);
RectF
rectF
=
new
RectF(0,y,bitmap.getWidth(),bitmap.getHeight());
canvas.drawRect(rectF,paint);
//最后设置为空
paint.setXfermode(null);
canvas.restoreToCount(layer);
}
/**
*
动画
*/
public
void
animator(){
ValueAnimator
animator
=
ValueAnimator.ofFloat(bitmap.getHeight(),0);
animator.addUpdateListener(new
ValueAnimator.AnimatorUpdateListener()
{
@Override
public
void
onAnimationUpdate(ValueAnimator
animation)
{
y
=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医保政策解读与策略
- 《支票的填写与使用》课件
- 艺术教育之旅
- 《销售人员回款培训》课件
- 《保安职业发展介绍》课件
- 童年读书报告范文
- 欢乐田园调研报告范文
- 可行性论证报告范文
- 《机械设计基础 》课件-项目三 常用连接
- 《认定课的课件思想道德修养与科学文化修养》课件
- Q∕GDW 10799.6-2018 国家电网有限公司电力安全工作规程 第6部分:光伏电站部分
- 口腔科诊断证明书模板
- 商业银行授权管理办法
- 苏州小吃学习教案
- 妇科5个病种临床路径
- 机加工刀具管理规定
- 精华网校高东辉一二三讲讲义
- 2021年全国中等职业学校学生服装设计与工艺技能大赛理论题库
- 五方单位评估报告
- 储罐制作安装预算书
- NUDD新独难异失效模式预防检查表
评论
0/150
提交评论