日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

Android如何用自定義View實現雪花效果

瀏覽:16日期:2022-09-19 15:23:42
效果圖

Android如何用自定義View實現雪花效果

1.SnowView 類

package com.ilz.rocketapplication.handaccount.view; import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.GestureDetector;import android.view.MotionEvent;import android.widget.RelativeLayout; import com.ilz.rocketapplication.handaccount.R;import com.ilz.rocketapplication.handaccount.bean.SnowBean;import com.ilz.rocketapplication.handaccount.utils.ColorUtils;import com.ilz.rocketapplication.handaccount.utils.Tools; import java.util.ArrayList;import java.util.List;import java.util.Timer;import java.util.TimerTask; public class SnowView extends RelativeLayout {// private final String SNOW = '❄';// private final String SNOW = '☀❆★❉❈❀✿❃❁'; private final String SNOW = '❄'; private float vX = 2.5f;//風向 >0 右邊飄 <0 左邊飄 private float vY = 5f;//下落速度 <0你的雪花要往上飄呀 private int snowCount = 50;//雪花個數 private List<SnowBean> snowBeanList = new ArrayList<>(); private int XB = Tools.getWindowsWidth(); private int YB = Tools.getWindowsHeight(); private Paint paint = new Paint(); private Timer timer; private boolean isStart = false; public SnowView(Context context) {this(context, null); } public SnowView(Context context, AttributeSet attrs) {this(context, attrs, 0); } public SnowView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);initView(); } private void initView() {paint.setAntiAlias(true);initSnowData(); } public void start() {if (timer == null) { timer = new Timer();}isStart = true;timer.schedule(new TimerTask() { @Override public void run() { if (!isStart) return;for (int i = 0; i < snowBeanList.size(); i++) { snowBeanList.get(i).setX(snowBeanList.get(i).getX() + vX); snowBeanList.get(i).setY(snowBeanList.get(i).getY() + vY); if (snowBeanList.get(i).getX() < 0 || snowBeanList.get(i).getX() > XB) {snowBeanList.get(i).setX(getRandomX()); } if (snowBeanList.get(i).getY() < 0 || snowBeanList.get(i).getY() > YB) {snowBeanList.get(i).setY(0f); }} postInvalidate(); }}, 0, 15); } public void resume() {if (timer == null) { start();}isStart = true; } public void pause(){isStart = false; } public void destroy() {isStart = false;if (snowBeanList != null) { snowBeanList.clear();}invalidate();if (timer != null) { timer.cancel(); timer = null;} } private void initSnowData() {for (int i = 0; i < snowCount; i++) { SnowBean bean = new SnowBean(); bean.setX(getRandomX()); bean.setY(getRandomY()); bean.setSize((float) (Math.random() * 50) + 5); snowBeanList.add(bean);} } private float getRandomX() {return (float) (Math.random() * Tools.getWindowsWidth()); } private float getRandomY() {return (float) (Math.random() * Tools.getWindowsHeight()); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) {super.onLayout(changed, l, t, r, b); } @Override protected void onDraw(Canvas canvas) {super.onDraw(canvas);for (int i = 0; i < snowBeanList.size(); i++) { SnowBean bean = snowBeanList.get(i); paint.setTextSize(bean.getSize()); paint.setColor(bean.getColor()); canvas.drawText(SNOW, bean.getX(), bean.getY(), paint);} } private GestureDetector detector = new GestureDetector(getContext(),new MyGestureDetector()); private boolean isPoint = false; private long pointTime = 0; @Override public boolean onTouchEvent(MotionEvent event) {//switch (event.getAction()) {// case MotionEvent.ACTION_DOWN://pointTime = 0;//int pCount = event.getPointerCount();//if (pCount >= 2) {// isPoint = true;// pointTime = System.currentTimeMillis();//}//break;// case MotionEvent.ACTION_MOVE://break;// case MotionEvent.ACTION_UP://isPoint = false;//pointTime = 0;//break;//} //return super.onTouchEvent(event);return detector.onTouchEvent(event); } private class MyGestureDetector implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener { @Overridepublic boolean onDown(MotionEvent e) { return false;} @Overridepublic void onShowPress(MotionEvent e) { } @Overridepublic boolean onSingleTapUp(MotionEvent e) { return false;} @Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return false;} @Overridepublic void onLongPress(MotionEvent e) { } @Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return false;} @Overridepublic boolean onSingleTapConfirmed(MotionEvent e) { return false;} @Overridepublic boolean onDoubleTap(MotionEvent e) { return false;} @Overridepublic boolean onDoubleTapEvent(MotionEvent e) { return false;} }}2.SnowBean

package com.ilz.rocketapplication.handaccount.bean; import android.graphics.Color; import com.ilz.rocketapplication.handaccount.utils.ColorUtils; public class SnowBean { float x; float y; float size; int color = Color.WHITE; public float getX() {return x; } public void setX(float x) {this.x = x; } public float getY() {return y; } public void setY(float y) {this.y = y; } public float getSize() {return size; } public void setSize(float size) {this.size = size; } public int getColor() {return color; } public void setColor(int color) {this.color = color; }}3.Tools

/** * 獲取屏幕的寬度 */public static int getWindowsWidth() { WindowManager wm = (WindowManager) (MyApplication.getInstance().getSystemService(Context.WINDOW_SERVICE)); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(dm); int mScreenWidth = dm.widthPixels; return mScreenWidth;}/** * 獲取屏幕的高度 */public static int getWindowsHeight() { WindowManager wm = (WindowManager) (MyApplication.getInstance().getSystemService(Context.WINDOW_SERVICE)); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(dm); int mScreenHeigh = dm.heightPixels; return mScreenHeigh;}

以上就是Android如何用自定義View實現雪花效果的詳細內容,更多關于Android自定義View雪花效果的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
麻豆一区二区三| 久久精品99国产国产精| 国产麻豆一区| 欧美精品影院| 国产一精品一av一免费爽爽| 日本不卡视频在线观看 | 婷婷综合亚洲| 午夜国产精品视频| 婷婷久久一区| 日本大胆欧美人术艺术动态| 亚洲久久在线| 国产日产精品_国产精品毛片| 国产日韩免费| 国产不卡一区| 蜜臀久久99精品久久一区二区| 性色一区二区| 日本不卡高清视频| 九九九精品视频| 欧美日韩一二三四| 六月婷婷一区| 国产精品资源| 久久久水蜜桃av免费网站| 亚洲制服少妇| 日日摸夜夜添夜夜添国产精品| 国产亚洲一区| yellow在线观看网址| 欧美午夜精彩| 亚洲乱亚洲高清| 国产精品尤物| 日韩在线不卡| 老牛影视一区二区三区| 欧美性www| 伊人久久在线| 男女男精品网站| 国产欧美日韩视频在线| av资源中文在线| 亚州av乱码久久精品蜜桃| 亚洲精选久久| 欧美亚洲二区| 欧美一区久久久| 亚洲欧美日韩一区在线观看| 日韩高清二区| 日韩欧美一区二区三区在线观看 | 国产一区二区三区免费在线| 婷婷成人综合| 国产欧美日韩一区二区三区四区| 丝袜美腿诱惑一区二区三区| 视频一区在线播放| 九九99久久精品在免费线bt| 免费视频一区三区| 国产精品乱战久久久| 欧洲激情综合| 日本国产亚洲| 国产在线不卡| 国产精品乱战久久久| 激情综合网五月| 国产精品一区二区精品| 欧美精品九九| 成人国产综合| 日韩有码av| 国产91久久精品一区二区| 国产探花一区在线观看| 欧美亚洲精品在线| 国产精品**亚洲精品| 国产精品7m凸凹视频分类| 国产精品巨作av| 蜜桃av一区| 国产网站在线| 青青草国产精品亚洲专区无| 欧美精品一区二区三区精品| 久久99久久人婷婷精品综合| 免费看精品久久片| 精品欧美一区二区三区在线观看| 欧美在线看片| 免费视频最近日韩| 九九综合九九| 日韩精品电影| 麻豆久久久久久久| 亚洲精品伊人| 婷婷丁香综合| 午夜久久中文| 美女久久99| 日本一区二区三区视频在线看| 亚洲四虎影院| 国产一区二区三区久久| 国产欧美日韩精品高清二区综合区 | 亚洲一区观看| 久久久天天操| 久久午夜影院| 日韩精品高清不卡| 欧美午夜不卡| 午夜av成人| 中文字幕在线免费观看视频| 国产极品模特精品一二| **爰片久久毛片| 亚洲精选成人| 久久亚洲风情| 日韩网站在线| 欧美日韩国产在线观看网站 | 欧美日韩a区| 免费一区二区视频| 欧美天堂亚洲电影院在线观看| 蜜桃视频在线网站| 水蜜桃精品av一区二区| 老鸭窝一区二区久久精品| 国产精品欧美一区二区三区不卡 | 亚洲人成高清| 丝袜美腿高跟呻吟高潮一区| 亚洲精华国产欧美| 婷婷久久一区| 欧美1级日本1级| 国产专区一区| 国产99久久| 亚洲午夜视频| 久久久久美女| 久久高清精品| 久久网站免费观看| 久久国产主播| 99精品视频精品精品视频| 国产 日韩 欧美一区| 五月激情久久| 亚洲午夜av| 国产毛片久久| 亚洲精品在线二区| 青草久久视频| 国产精品亚洲片在线播放| 国产亚洲观看| 麻豆91小视频| 高清久久一区| 国产超碰精品| 欧美+亚洲+精品+三区| 亚洲精品1区| 亚洲精品系列| 国产一级成人av| 久久免费精品| av在线资源| 99久久久久国产精品| 蜜臀久久99精品久久一区二区| 一区福利视频| 亚洲另类视频| 欧美国产极品| 亚洲精品乱码| 日韩中文字幕高清在线观看| 国产精品久久久久久久久久10秀| 久久的色偷偷| 精品三级国产| 成人免费网站www网站高清| 亚洲国产影院| 蜜桃视频在线观看一区| 日本va欧美va瓶| 久久精品毛片| 久久一区二区三区喷水| 男人的天堂久久精品| 日本中文字幕一区二区视频| 麻豆久久一区| 久久精选视频| 香蕉久久久久久| 久久wwww| 久久免费高清| 视频一区二区国产| 国产欧美一区二区三区米奇| 国产传媒在线| 石原莉奈在线亚洲三区| 国产精品对白| 日韩不卡视频在线观看| 免费美女久久99| 久久麻豆视频| 国产亚洲永久域名| 麻豆精品99| 在线国产一区二区| 日韩精品国产精品| а√天堂中文在线资源8| 久久午夜视频| 成人在线视频区| 国产亚洲精品v| 国产欧美日韩影院| 日韩精品久久久久久久电影99爱| 国产一区观看| 久久国产精品久久久久久电车| 一区二区精彩视频| 精品一区二区三区视频在线播放 | 精品香蕉视频| 亚洲一区日韩| 精品视频一区二区三区四区五区 | 日韩av电影一区| 99久久亚洲精品蜜臀| 日韩高清欧美激情| 999久久久国产精品| 69堂精品视频在线播放| 999国产精品永久免费视频app| 日韩黄色免费网站| 婷婷成人基地| 精品国产成人| 日韩一区二区三区精品 | 国产精品自拍区| 欧美日韩国产一区二区三区不卡| 日韩av在线免费观看不卡| 亚洲欧洲国产精品一区| 精品视频网站| 综合一区av|