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加入购物车的动画,vue实现加入购物车动画

预备基础整体思路定义商品列表&#xff0c;设置点击的元素(点击后触发加入购物车的函数addToShopCart)注&#xff1a;这里要把$event传递过去&#xff0c;方便得到target定义一个component用来放购物车和运动的小球定义一个component用来放运动的小球&#xff0c;里面包含多个b…

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;希望能给大家带来帮助!1、计算机病毒是(B)。A.计算机系统自生的B.一…

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

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

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

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

计算机相近专业有哪些,计算机相关的专业有哪些

计算机、会计及相关专业计算机及相关专业04015700 教育信息技术04034200 现代信息技术教育05034300 出版与电脑编辑技术05049300 互联网广告设计05047900 电脑艺术设计07010200 信息与计算科学07014100 计算数学及其应用软件07014200 信息科学07120100 电子信息科学与技术07120…

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

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

福建高职计算机知识点,2013福建高职单招 计算机类专业 知识试题

2013福建高职单招 计算机类专业 知识试题计算机类专业基础知识试题第Ⅰ卷一、单项选择题(在每小题的四个备选答案中&#xff0c;选出一个正确答案&#xff0c;并将正确的字母标号填涂在答题卡相应在位置上&#xff0c;每小题3分&#xff0c;共120分)1、 世界上第一台计算机(ENI…

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

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

在html中 正确的嵌套方式是( ).,HTML及网页制作练习题-完整版

1、在HTML中&#xff0c;()标记不可出现在和标记符之间。(C)(&#xff21;)(&#xff22;)(&#xff23;)(&#xff24;)2、(A)单元格所跨的列数(B)行的宽度(C)列的高度(D)单元格所跨的行数3、在HTML中&#xff0c;正确的嵌套方式是(B)。(&#xff21;)(&#xff22;)(&#xf…

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

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

19秋学期计算机网络基础在线作业,南开19秋学期(1709、1803、1809、1903、1909)《计算机网络基础》在线作业资料答案3...

19秋学期(1709、1803、1809、1903、1909)《计算机网络基础》在线作业-0003试卷总分:100 得分:100一、单选题 (共 15 道试题,共 30 分)1.物理层的主要任务描述为确定与传输媒体的接口的一些特性&#xff0c;()指明对于不同功能的各种可能事件的出现顺序。[A.]过程特性[B.]电气特…

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

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

计算机网络设置中如何删除家庭组,【求助】Windows无法从该家庭组中删除你的计算机...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼echo 服务名称fdPHost&#xff0c;显示名称Function Discovery Provider Host&#xff0c;进程svchost.exeecho DEMAND或DISABLED或AUTO(手动、禁止、自动)sc config fdPHost start DEMANDecho stop立即停止start立即开启delete删除…

图片还原去遮挡_斗罗:这届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;共…