电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Android實現花瓣飄落效果的步驟

瀏覽:52日期:2022-09-19 08:47:11
效果展示

Android實現花瓣飄落效果的步驟

實現原理 首先需要生成繪制小花的坐標點,坐標點的橫坐標是根據控件的寬度隨機生成的,而縱坐標則設置為小花圖片高度的負值(這樣可以實現小花從屏幕外進入)。 將這些點存儲到集合當中。 遍歷集合根據點的位置繪制小花 繪制完后不斷增加各個點的縱坐標實現步驟

1.定義變量將變量初始化

private SurfaceHolder mHolder; private boolean mFlag = true;//繪制小花線程的開關標志 private ArrayList<PointF> mFlowers;//小花點的坐標集合 private Random mRandom;//負責隨機數生成 private Bitmap mBitmap;//小花的圖案 public FlowerView(Context context) {super(context);init(); } public FlowerView(Context context, AttributeSet attrs) {super(context, attrs);init(); } public FlowerView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(); } private void init(){mHolder = getHolder();mHolder.addCallback(this);//設置背景透明this.setZOrderOnTop(true);mHolder.setFormat(PixelFormat.TRANSLUCENT);mFlowers = new ArrayList<>();mRandom = new Random();mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_hua); }

2.實現添加花朵坐標點的方法

/** * 添加花朵 */ private void addFlower(){PointF point = new PointF();point.x=mRandom.nextInt(getWidth());//根據控件寬度隨機生成X軸坐標point.y=-mBitmap.getHeight();//縱坐標設置為小花圖像的負值(產生從屏幕外進入的效果)mFlowers.add(point);//將坐標點添加進集合 }

3.實現SurfaceHolder.Callback及Runnable接口

public class FlowerView extends SurfaceView implements SurfaceHolder.Callback,Runnable

4.在run方法中實現繪制邏輯

@Override public void run() {while (mFlag){ try {Thread.sleep(80);//控制小花的下落速度Canvas canvas = mHolder.lockCanvas();PointF pointF = null;//清屏操作(否則會殘留一些無用圖像)if(canvas!=null){ canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);}else { continue;}for(PointF point: mFlowers){ pointF = point; canvas.drawBitmap(mBitmap,pointF.x,pointF.y,null); int i = mRandom.nextInt(getHeight()/50)+getHeight()/50;//修改雨滴線的縱坐標,使其看起來在下雨 pointF.y=pointF.y+i;}mHolder.unlockCanvasAndPost(canvas);addFlower();//當繪制點的縱坐標大于控件高度時,將該點移除if(mFlowers.size()>0&&pointF!=null&&pointF.y>=getHeight()){ mFlowers.remove(pointF);} }catch (Exception e){}} }

5.在SurfaceHolder.Callback的回調方法中開啟繪制線程

@Override public void surfaceCreated(SurfaceHolder holder) {mFlag = true;//surface創建時將線程開關打開new Thread(this).start();//開啟線程繪制 } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {mFlowers.clear();//當控件發生改變時清除之前的繪制點 } @Override public void surfaceDestroyed(SurfaceHolder holder) {mFlag = false;//當surface銷毀時關掉繪制線程 }完整代碼展示

public class FlowerView extends SurfaceView implements SurfaceHolder.Callback,Runnable{ private SurfaceHolder mHolder; private boolean mFlag = true;//繪制小花線程的開關標志 private ArrayList<PointF> mFlowers;//小花點的坐標集合 private Random mRandom;//負責隨機數生成 private Bitmap mBitmap;//小花的圖案 public FlowerView(Context context) {super(context);init(); } public FlowerView(Context context, AttributeSet attrs) {super(context, attrs);init(); } public FlowerView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(); } private void init(){mHolder = getHolder();mHolder.addCallback(this);//設置背景透明this.setZOrderOnTop(true);mHolder.setFormat(PixelFormat.TRANSLUCENT);mFlowers = new ArrayList<>();mRandom = new Random();mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_hua); } @Override public void surfaceCreated(SurfaceHolder holder) {mFlag = true;new Thread(this).start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {mFlowers.clear(); } @Override public void surfaceDestroyed(SurfaceHolder holder) {mFlag = false; } @Override public void run() {while (mFlag){ try {Thread.sleep(80);Canvas canvas = mHolder.lockCanvas();PointF pointF = null;//清屏操作if(canvas!=null){ canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);}else { continue;}for(PointF point: mFlowers){ pointF = point; canvas.drawBitmap(mBitmap,pointF.x,pointF.y,null); int i = mRandom.nextInt(getHeight()/50)+getHeight()/50;//修改雨滴線的縱坐標,使其看起來在下雨 pointF.y=pointF.y+i;}mHolder.unlockCanvasAndPost(canvas);addFlower();if(mFlowers.size()>0&&pointF!=null&&pointF.y>=getHeight()){ mFlowers.remove(pointF);} }catch (Exception e){}} } /** * 添加花朵 */ private void addFlower(){PointF point = new PointF();point.x=mRandom.nextInt(getWidth());point.y=-mBitmap.getHeight();mFlowers.add(point); }}

以上就是Android實現花瓣飄落效果的步驟的詳細內容,更多關于Android實現花瓣飄落效果的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 知网论文检测系统入口_论文查重免费查重_中国知网论文查询_学术不端检测系统 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 水性漆|墙面漆|木器家具漆|水漆涂料_晨阳水漆官网| 国资灵活用工平台_全国灵活用工平台前十名-灵活用工结算小帮手 | 厦门网站建设_厦门网站设计_小程序开发_网站制作公司【麦格科技】 | 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 德国EA可编程直流电源_电子负载,中国台湾固纬直流电源_交流电源-苏州展文电子科技有限公司 | NMRV减速机|铝合金减速机|蜗轮蜗杆减速机|NMRV减速机厂家-东莞市台机减速机有限公司 | 干粉砂浆设备-干粉砂浆生产线-干混-石膏-保温砂浆设备生产线-腻子粉设备厂家-国恒机械 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 自动化改造_智虎机器人_灌装机_贴标机-上海圣起包装机械 | 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | 线材成型机,线材折弯机,线材成型机厂家,贝朗自动化设备有限公司1 | 车牌识别道闸_停车场收费系统_人脸识别考勤机_速通门闸机_充电桩厂家_中全清茂官网 | 我车网|我关心的汽车资讯_汽车图片_汽车生活! | 超声波清洗机-超声波清洗设备定制生产厂家 - 深圳市冠博科技实业有限公司 | 盘式曝气器-微孔曝气器-管式曝气器-曝气盘-斜管填料 | 郑州市前程水处理有限公司 | 苏州防水公司_厂房屋面外墙防水_地下室卫生间防水堵漏-苏州伊诺尔防水工程有限公司 | 亚洲工业智能制造领域专业门户网站 - 亚洲自动化与机器人网 | HEYL硬度计量泵-荧光法在线溶解氧仪-净时测控技术(上海)有限公司 | 小区健身器材_户外健身器材_室外健身器材_公园健身路径-沧州浩然体育器材有限公司 | 壹作文_中小学生优秀满分作文大全| 间苯二酚,间苯二酚厂家-淄博双和化工 | 讲师宝经纪-专业培训机构师资供应商_培训机构找讲师、培训师、讲师经纪就上讲师宝经纪 | 阀门智能定位器_电液动执行器_气动执行机构-赫尔法流体技术(北京)有限公司 | 西点培训学校_法式西点培训班_西点师培训_西点蛋糕培训-广州烘趣西点烘焙培训学院 | 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | led冷热冲击试验箱_LED高低温冲击试验箱_老化试验箱-爱佩百科 | 成都离婚律师|成都结婚律师|成都离婚财产分割律师|成都律师-成都离婚律师网 | 120kv/2mA直流高压发生器-60kv/2mA-30kva/50kv工频耐压试验装置-旭明电工 | 杭州厂房降温,车间降温设备,车间通风降温,厂房降温方案,杭州嘉友实业爽风品牌 | 苏商学院官网 - 江苏地区唯一一家企业家自办的前瞻型、实操型商学院 | 搪瓷反应釜厂家,淄博搪瓷反应釜-淄博卓耀 | 金属管浮子流量计_金属转子流量计厂家-淮安润中仪表科技有限公司 | 山东彩钢板房,山东彩钢活动房,临沂彩钢房-临沂市贵通钢结构工程有限公司 | IIS7站长之家-站长工具-爱网站请使用IIS7站长综合查询工具,中国站长【WWW.IIS7.COM】 | 设定时间记录电子秤-自动累计储存电子秤-昆山巨天仪器设备有限公司 | 振动筛,震动筛,圆形振动筛,振动筛价格,振动筛厂家-新乡巨宝机电 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 北京燃气公司 用户服务中心| 电气控制系统集成商-PLC控制柜变频控制柜-非标自动化定制-电气控制柜成套-NIDEC CT变频器-威肯自动化控制 | 全自动固相萃取仪_高通量真空平行浓缩仪-勤业永为 |