【移动应用开发技术】Android中怎么利用Xfermode实现动态文字加载动画_第1页
【移动应用开发技术】Android中怎么利用Xfermode实现动态文字加载动画_第2页
【移动应用开发技术】Android中怎么利用Xfermode实现动态文字加载动画_第3页
【移动应用开发技术】Android中怎么利用Xfermode实现动态文字加载动画_第4页
【移动应用开发技术】Android中怎么利用Xfermode实现动态文字加载动画_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论