色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

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

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

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

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

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

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

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

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

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;//修改雨滴線的縱坐標,使其看起來在下雨 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創(chuàng)建時將線程開關打開new Thread(this).start();//開啟線程繪制 } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {mFlowers.clear();//當控件發(fā)生改變時清除之前的繪制點 } @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;//負責隨機數(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);//設置背景透明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實現(xiàn)花瓣飄落效果的步驟的詳細內容,更多關于Android實現(xiàn)花瓣飄落效果的資料請關注好吧啦網(wǎng)其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 国产三片高清在线观看 | 精品一区二区三区四区在线 | 久久黄色精品视频 | 国产成人免费在线 | 国产高清在线精品免费 | 4438全国最大成人网视频 | 精品伊人久久久久7777人 | 特级a欧美孕妇做爰片毛片 特级a欧美做爰片毛片 | 国产性大片黄在线观看在线放 | 中文字幕视频在线观看 | 韩国日本一级毛片免费视频 | 久久国产亚洲 | 精品一区二区三区视频在线观看免 | 欧美日韩一区二区三 | 高h原耽肉汁动漫视频 | 精品亚洲欧美高清不卡高清 | 免费一级a毛片在线 | 加勒比日本道 | youjizz日韩 | 欧美精品一区二区三区免费观看 | 92手机看片福利永久国产 | 久久久国产一区二区三区丝袜 | 欧美日本一道高清二区三区 | 国内国产真实露脸对白 | 久久夜色精品国产亚洲 | 亚洲第一区视频在线观看 | 欧美特欧美特级一片 | 欧美精选在线 | 深夜福利视频网站 | 国产成人精品日本亚洲专一区 | 欧美6699在线视频免费 | 草草影院免费 | 亚洲国产第一区二区三区 | 三级国产在线观看 | 国产人成免费视频 | 99九九精品国产高清自在线 | 日韩a级毛片免费视频 | 国产杨幂福利在线视频观看 | 日本在线免费观看视频 | 亚洲欧美日韩国产制服另类 | 久久国产免费观看 |