亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

Android實現(xiàn)花瓣飄落效果的步驟

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

Android實現(xiàn)花瓣飄落效果的步驟

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

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

private SurfaceHolder mHolder; private boolean mFlag = true;//繪制小花線程的開關(guān)標(biāo)志 private ArrayList<PointF> mFlowers;//小花點的坐標(biāo)集合 private Random mRandom;//負(fù)責(zé)隨機(jī)數(shù)生成 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);//設(shè)置背景透明this.setZOrderOnTop(true);mHolder.setFormat(PixelFormat.TRANSLUCENT);mFlowers = new ArrayList<>();mRandom = new Random();mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_hua); }

2.實現(xiàn)添加花朵坐標(biāo)點的方法

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

3.實現(xiàn)SurfaceHolder.Callback及Runnable接口

public class FlowerView extends SurfaceView implements SurfaceHolder.Callback,Runnable

4.在run方法中實現(xiàn)繪制邏輯

@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;//修改雨滴線的縱坐標(biāo),使其看起來在下雨 pointF.y=pointF.y+i;}mHolder.unlockCanvasAndPost(canvas);addFlower();//當(dāng)繪制點的縱坐標(biāo)大于控件高度時,將該點移除if(mFlowers.size()>0&&pointF!=null&&pointF.y>=getHeight()){ mFlowers.remove(pointF);} }catch (Exception e){}} }

5.在SurfaceHolder.Callback的回調(diào)方法中開啟繪制線程

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

public class FlowerView extends SurfaceView implements SurfaceHolder.Callback,Runnable{ private SurfaceHolder mHolder; private boolean mFlag = true;//繪制小花線程的開關(guān)標(biāo)志 private ArrayList<PointF> mFlowers;//小花點的坐標(biāo)集合 private Random mRandom;//負(fù)責(zé)隨機(jī)數(shù)生成 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);//設(shè)置背景透明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;//修改雨滴線的縱坐標(biāo),使其看起來在下雨 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實現(xiàn)花瓣飄落效果的步驟的詳細(xì)內(nèi)容,更多關(guān)于Android實現(xiàn)花瓣飄落效果的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 夜夜夜爽爽爽久久久 | 首页国产精品萌社区 | 国产美女激情 | 国产91情侣在线精品国产 | 亚洲毛片免费视频 | 国内精品久久久久影院嫩草 | 国产精品超清大白屁股 | 黄色毛片免费在线观看 | 色佬影院| 韩国一级毛片在线高清免费 | 久久精品亚洲 | 成年人在线观看视频网站 | 国产一级特黄高清免费大片 | 日韩欧美在线观看综合网另类 | 大学生高清一级毛片免费 | 美女被啪全免视频软件 | 国产二区自拍 | 国产免费黄色网址 | 亚洲在线a | 免费人成观看在线网 | 美女xx网站 | 亚洲一级毛片在线播放 | 国产乱子精品免费视观看片 | 成人在线视频网址 | 久久手机免费视频 | a级精品九九九大片免费看 a级情欲片在线观看免费女中文 | 国产精品亚洲第一区焦香 | 久久久久久尹人网香蕉 | 九九精品视频在线 | aaa毛片视频免费观看 | 全部免费国产潢色一级 | 一级毛片欧美一级日韩黄 | 色y视频 | 在线看片y | 操日韩| 999久久久免费精品国产牛牛 | 一级毛片美国aaj毛片 | 蕾丝视频成人★在线观看 | 精品久久一区 | 一区二区免费视频 | 私人影院aaaaa毛片 |