android 屏幕飘动,Android自定义View实现飘动的叶子效果(三)

上一篇对自定义View及一些方法有所了解,下面做一个简单的叶子飘动的例子

902a094513625900932a5cb492260075.gif

主要技术点

1、添加背景图片canvas.drawBitmap()

2、Matrix动画类

3、Matrix添加到画布上

步骤

1、添加黄色背景颜色

public LeafView(Context context, AttributeSet attrs) {

super(context, attrs);

bgPaint = new Paint();

bgPaint.setColor(mResources.getColor(R.color.bg_color));

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

width = w;

height = h;

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

bgRect = new RectF(0, 0 , width, height);

canvas.drawRect(bgRect, bgPaint);

}

6504431283aaffcdd0bd7812a6c32280.png

2、添加背景图片

public LeafView(Context context, AttributeSet attrs) {

super(context, attrs);

mResources = getResources();

bgBitmap = ((BitmapDrawable) mResources.getDrawable(R.drawable.leaf_kuang, null)).getBitmap();

bgPaint = new Paint();

bgPaint.setColor(mResources.getColor(R.color.bg_color));

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

width = w;

height = h;

bgDestRect = new Rect(0, 0 , width, height);

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

bgRect = new RectF(0, 0 , width, height);

canvas.drawRect(bgRect, bgPaint);

canvas.drawBitmap(bgBitmap, null, bgDestRect, null);

}

canvas.drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) 添加图片到画布

Rect src:图片剪裁,null图片显示全屏,  RectF dst:图片在Canvas画布区域

5344ee57279cec17a7108076fc0f7b0b.png

3、添加叶子

public LeafView(Context context, AttributeSet attrs) {

super(context, attrs);

mResources = getResources();

bgBitmap = ((BitmapDrawable) mResources.getDrawable(R.drawable.leaf_kuang, null)).getBitmap();

leafBitmap = ((BitmapDrawable) mResources.getDrawable(R.drawable.leaf, null))).getBitmap();

bgPaint = new Paint();

bgPaint.setColor(mResources.getColor(R.color.bg_color));

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

width = w;

height = h;

bgDestRect = new Rect(0, 0 , width, height);

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

bgRect = new RectF(0, 0 , width, height);

//添加黄色背景

canvas.drawRect(bgRect, bgPaint);

//添加背景图片

canvas.drawBitmap(bgBitmap, null, bgDestRect, null);

//添加叶子

canvas.drawBitmap(leafBitmap, new Matrix(), new Paint());

}

canvas.drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)添加一个带动画的bitmap到画布

这里matrix什么都没定义,所以默认如下显示,左上角叶子

adf6811570872f7344fcb5ca950e82fb.png

4、给叶子添加Matrix动画

Matrix作用:

a、translate 平移

b、rotate 旋转

c、scale 缩放

d、skew 倾斜

这里要用到matrix.postTranslate(float x, float y),以画布左上角为(0,0); xy为平移绝对值

public LeafView(Context context, AttributeSet attrs) {

super(context, attrs);

mResources = getResources();

bgBitmap = ((BitmapDrawable) mResources.getDrawable(R.drawable.leaf_kuang, null)).getBitmap();

leafBitmap = ((BitmapDrawable) mResources.getDrawable(R.drawable.leaf, null))).getBitmap();

mLeafHeight = leafBitmap.getWidht();

bgPaint = new Paint();

bgPaint.setColor(mResources.getColor(R.color.bg_color));

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

width = w;

height = h;

bgDestRect = new Rect(0, 0 , width, height);

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

bgRect = new RectF(0, 0 , width, height);

//添加黄色背景

canvas.drawRect(bgRect, bgPaint);

//添加背景图片

canvas.drawBitmap(bgBitmap, null, bgDestRect, null);

//添加叶子

Matrix matrix = new Matrix();

matrix.postTranslate(getMatriX(), (height-mLeadHeight)/2);

canvas.drawBitmap(leafBitmap, new Matrix(), new Paint());

//重复调用onDraw()

postInvalidate();

}

long cycleTime = 5000; //叶子滑动一周的时间5秒

long startTime = 0; //叶子滑动开始时间

private float getMatriX() {

float betweenTime = startTime - System.currentTimeMillis();

//周期结束再加一个cycleTime

if(betweenTime < 0) {

startTime = System.currentTimeMillis() + cycleTime;

betweenTime = cycleTime;

}

//通过时间差计算出叶子的坐标

float fraction = (float) betweenTime / cycleTime;

float x = (int)(width * fraction);

return x;

}

好了,看到的效果就是如下,由于Matrix没有设置动画时间长度概念,所以通过时间差来计算出位移值的方式,来设置滑动快慢

134cb8dd7fc382681d94e46f426ab614.gif

完整代码不贴了,就把上面这段代码复制到一个LeafView extends View中,然后在里面定义几个全局变量就好了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持找一找教程网。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html 美化input file,Input[type=”file”] 显示效果美化方法 | 智慧宫

Html中input可以作为上传图片代码如下但是演示非常不好看&#xff0c;下面做一番美化处理&#xff0c;效果如下&#xff1a;文件上传美化前后对比美化方法隐藏 input 标签使用 label 标签在input标签位置显示&#xff1b;用js获取 input 中上传的文件名称&#xff0c;并在 labl…

html 进入效果,用css3实现简单的进入效果

这是一个比较简单的小例子&#xff0c;实现如图效果仅仅用css3就可以达到这种效果&#xff0c;代码如下&#xff1a;.div {position: relative;top: 20px;height: 300px;width: 200px;margin: 0 auto;background: blue;float: left;margin-left: 20px;}.div2 {position: relati…

计算机专业中agp是什么意思,计算机中AGP是什么意思及其特性介绍

AGP (Accelerated Graphic Ports 或者 Advanced Graphic Ports) 是当前已经被淘汰的图形系统接口。这项技术始于十四年以前&#xff0c;当时的3D图形加速技术开始流行并且迅速普及&#xff0c;为了使系统和图形加速卡之间的数据传输获得比PCI总线更高的带宽&#xff0c;AGP便应…

计算机目标导学方法,计算机教学计划

计算机教学计划信息技术课程是一门特殊比较的学科&#xff0c;操作性较强&#xff0c;大部分学生对此相当感兴趣。 以下是为大家整理的计算机教学计划&#xff0c;希望对你们有所帮助&#xff01;篇一&#xff1a;计算机教学计划本学期我任教11级护理班的计算机应用基础课程教学…

java 网络编程connection timed out是什么意思_什么?听说这四个概念,很多 Java 老手都说不清...

Java 是很多人一直在用的编程语言&#xff0c;但是有些 Java 概念是非常难以理解的&#xff0c;哪怕是一些多年的老手&#xff0c;对某些 Java 概念也存在一些混淆和困惑。所以&#xff0c;在这篇文章里&#xff0c;会介绍四个 Java 中最难理解的四个概念&#xff0c;去帮助开发…

assembly 输出ab中所有数_.NET Core中批量注入Grpc服务

(给DotNet加星标&#xff0c;提升.Net技能)转自&#xff1a;张子浩cnblogs.com/ZaraNet/p/12167517.htmlGRPC 是谷歌发布的一个开源、高性能、通用RPC服务&#xff0c;尽管大部分 RPC 框架都使用 TCP 协议&#xff0c;但其实 UDP 也可以&#xff0c;而 gRPC 干脆就用了 HTTP2。…

kdj指标主要看哪个值_悟空CRM:在线crm主要看这两个指标,都非常重要!

crm对很多企业都非常重要&#xff0c;可是很多人并不明白crm到底重要在哪些地方&#xff1f;比如说很多人都比较喜欢使用这个系统&#xff0c;尤其是在线crm。 在线crm主要看这两个指标&#xff0c;都非常重要&#xff0c;这两个指标如果上去了&#xff0c;基本上对企业的运营都…

鼠标控制视角wasd移动_绝地求生:为什么控制方向键是WASD?网友:就不能是其他键位吗?...

哈喽&#xff0c;大家好这里是大能有话说&#xff0c;现在的网络游戏越来越发达&#xff0c;每个游戏的玩法有非常多种&#xff0c;但是不知道小伙伴们有没有发现&#xff0c;在需要控制方向的情况下&#xff0c;咱们用的都是W、A、S、D这四个键&#xff0c;那为什么偏偏就一定…

javawed商店商品结算_微信小商店搭建

点击上方蓝字关注我吧个人也能搭建微信小商店了&#xff0c;直接下单&#xff0c;微信立马到账&#xff0c;方便快捷&#xff0c;对于个人来说&#xff0c;在网上卖东西&#xff0c;有了一个利于客户下单的渠道。1、微信小商店介绍为了进一步降低进入小程序生态经营和卖货的门槛…

图片还原去遮挡_斗罗:这届coser太强,动画刚播出两天,战损三哥就被还原了...

斗罗大陆作为玄机旗下的热门动画&#xff0c;不仅多次登上热搜&#xff0c;引发漫迷热议&#xff0c;还吸引了众位coser的注意力。作品从开播到现在&#xff0c;基本上绝大多数角色都曾被coser还原过。对于里面的热门角色&#xff0c;例如史莱克七怪&#xff0c;几乎是每更换一…

熟悉html css,编写HTML和CSS的前端开发中不一定熟悉JavaScript

原标题&#xff1a;编写HTML和CSS的前端开发中不一定熟悉JavaScript作为前端开发人员&#xff0c;HTML、css、Java是必备的知识技能&#xff0c;但是现实工作工作中并非所有的前端都知道Java&#xff0c;根据外国一个网站的匿名调查发现&#xff0c;有17%的开发人员不知道Java&…

fastapi 传输文件存文件_揭秘|国内影视文件传输的真相,跨境文件传输更不简单...

2020年影视行业至黑时刻总算要过去了&#xff0c;下半年复苏迹象已经显现。作为影视行业的基础搬运工&#xff0c;文件传输贯穿始末。无论是TB级原始素材还是后期协作的大文件&#xff0c;多团队高效协作必然要考虑大文件传输这个基础工具。在选择文件传输软件这件事上&#xf…

计算机考csp200分啥水平,计算机与信息工程学院成功举办第20次CCF CSP认证考试

2020年9月13日&#xff0c;计算机与信息工程学院在计算机大楼201举办第二十次CCF CSP认证考试。这是计算机与信息工程学院2019年12月与中国计算机学会签署协议、河南大学正式成为CSP认证考点以来&#xff0c;举办的首次CCF CSP认证考试。本次认证考试历时四个小时&#xff0c;共…

gta5显示nat较为严格_为何严格治理下雾霾天仍频发?哈尔滨市环保局解答重污染天3大疑问...

哈尔滨市环保局副局长姚玮晶解答近期重污染天三疑问我省与吉林大气污染或将联防联控气象条件不利秸秆焚烧集中 是雾霾主因今年供暖季以来&#xff0c;冰城污染天频发&#xff0c;与去年同期相比&#xff0c;重污染天气有所增多。自2013年冰城爆发大规模雾霾以来&#xff0c;省市…

中国科技大学计算机考研复试内容,中国科学技术大学考研复试

出国留学网考研网为大家提供中国科学技术大学材料科学与工程学院2018考研复试内容&#xff0c;更多考研资讯请关注我们网站的更新!中国科学技术大学材料科学与工程学院2018考研复试内容为进一步规范硕士生复试工作&#xff0c;确保复试工作的有效性和公平、公开、公正原则&…

单片机搭建环境烧录方法_单片机仿真器的工作原理解析

仿真器出现的原因1、早期的单片机内部没有ROM&#xff0c;比如8031、8032&#xff0c;这种单片机只能外部扩展紫外擦除的EPROM存储器&#xff0c;就是芯片上带窗口的ROM。紫外擦除的ROM需要用紫外灯照射较长时间(10分钟或者更多)才能擦掉芯片中的内容以便写入新的程序。2、有的…

分布式存储图解_BERT的youxiu变体:ALBERT论文图解介绍

作者&#xff1a;amitness编译&#xff1a;ronghuaiyang正文共&#xff1a; 3116 字 21 图预计阅读时间&#xff1a; 9 分钟原文链接&#xff1a;BERT的youxiu变体&#xff1a;ALBERT论文图解介绍​mp.weixin.qq.comALBERT作为BERT的一个变体&#xff0c;在保持性能的基础上&am…

数据分析转软件测试,(转)性能测试用户模型(三):基础数据分析、场景数据...

作者&#xff1a;薛定谔的破猫基础数据分析以下图表均取自互联网&#xff0c;本文是在“已经获取所需数据”的前提下&#xff0c;讲解性能测试的一些设计思路。至于如何才能取得这些数据&#xff0c;将在后续的文章中说明。系统访问量分布由系统的日访问量分布图&#xff0c;可…

王者体验服服务器注册人数已满,王者官方大厅奖励有多难获得?服务器直接崩溃,玩家:别发红包了...

可乐要加冰&#xff0c;乔妹在你心&#xff0c;大家好我是小乔妹&#xff0c;每天为您分享有趣的王者资讯&#xff0c;感谢您的关注。王者荣耀一直以来都有许许多多的活动&#xff0c;有限时活动也有长久活动&#xff0c;但官方专属大厅奖励活动确实王者史上第一次奖励&#xf…

cmd输入pip报错_使用Pip管理Python的包

这是我的Python教程的第2篇文章第1篇文章在这里:Python安装0x01Pip介绍Pip是Python的包管理程序,负责Python的包的查找,下载,安装,卸载工作;使用Pip可以轻松的管理Python成千上万的第三包,使你在Python程序的开发如鱼得水0x02使用Pip确保已经把Python的路径添加进系统路径右键我…