亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android自定義view實現圓的擴散效果

2019-10-21 21:26:08
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android自定義View的實現水波紋,供大家參考,具體內容如下

一、實現效果

Android,view,擴散

MainActivity.xml

 

<?xml version="1.0" encoding="utf-8"?><LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:app="http://schemas.android.com/apk/res-auto"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical"  tools:context=".MainActivity">  <jt.com.animatorcirecle.myview.DiffuseView    android:id="@+id/diffuseView"    android:layout_width="match_parent"    android:layout_height="0dp"    android:layout_weight="1"    app:diffuse_color="@color/colorAccent"    app:diffuse_coreColor="@color/colorPrimaryDark"    app:diffuse_coreImage="@android:drawable/ic_menu_search"    app:diffuse_coreRadius="100"    app:diffuse_maxWidth="300"    app:diffuse_speed="5"    app:diffuse_width="4"/>  <Button    android:id="@+id/button"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:text="開始擴散"/>  <Button    android:id="@+id/button2"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_marginTop="10dp"    android:text="停止擴散"/></LinearLayout>

MainActivity中的點擊事件

 

public class MainActivity extends AppCompatActivity {  private Button button;  private Button button2;  private DiffuseView diffuseView;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    button =  findViewById(R.id.button);    button2 =  findViewById(R.id.button2);    diffuseView = findViewById(R.id.diffuseView);    button.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View v) {        diffuseView.start();      }    });    button2.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View v) {        diffuseView.stop();      }    });  }}

自定義view類

 

public class DiffuseView extends View {  /** 擴散圓圈顏色 */  private int mColor = getResources().getColor(R.color.colorAccent);  /** 圓圈中心顏色 */  private int mCoreColor = getResources().getColor(R.color.colorPrimary);  /** 中心圓半徑 */  private float mCoreRadius = 150;  /** 擴散圓寬度 */  private int mDiffuseWidth = 3;  /** 最大寬度 */  private Integer mMaxWidth = 255;  /** 擴散速度 */  private int mDiffuseSpeed = 5;  /** 是否正在擴散中 */  private boolean mIsDiffuse = false;  // 透明度集合  private List<Integer> mAlphas = new ArrayList<>();  // 擴散圓半徑集合  private List<Integer> mWidths = new ArrayList<>();  private Paint mPaint;  public DiffuseView(Context context) {    this(context, null);  }  public DiffuseView(Context context, AttributeSet attrs) {    this(context, attrs, -1);  }  public DiffuseView(Context context, AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);    init();    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DiffuseView, defStyleAttr, 0);    mColor = a.getColor(R.styleable.DiffuseView_diffuse_color, mColor);    mCoreColor = a.getColor(R.styleable.DiffuseView_diffuse_coreColor, mCoreColor);    mCoreRadius = a.getFloat(R.styleable.DiffuseView_diffuse_coreRadius, mCoreRadius);    mDiffuseWidth = a.getInt(R.styleable.DiffuseView_diffuse_width, mDiffuseWidth);    mMaxWidth = a.getInt(R.styleable.DiffuseView_diffuse_maxWidth, mMaxWidth);    mDiffuseSpeed = a.getInt(R.styleable.DiffuseView_diffuse_speed, mDiffuseSpeed);    a.recycle();  }  private void init() {    mPaint = new Paint();    mPaint.setAntiAlias(true);    mAlphas.add(255);    mWidths.add(0);  }  @Override  public void invalidate() {    if(hasWindowFocus()){      super.invalidate();    }  }  @Override  public void onWindowFocusChanged(boolean hasWindowFocus) {    super.onWindowFocusChanged(hasWindowFocus);    if(hasWindowFocus){      invalidate();    }  }  @Override  public void onDraw(Canvas canvas) {    // 繪制擴散圓    mPaint.setColor(mColor);    for (int i = 0; i < mAlphas.size(); i ++) {      // 設置透明度      Integer alpha = mAlphas.get(i);      mPaint.setAlpha(alpha);      // 繪制擴散圓      Integer width = mWidths.get(i);      canvas.drawCircle(getWidth() / 2, getHeight() / 2, mCoreRadius + width, mPaint);      if(alpha > 0 && width < mMaxWidth){        mAlphas.set(i, alpha - mDiffuseSpeed > 0 ? alpha - mDiffuseSpeed : 1);        mWidths.set(i, width + mDiffuseSpeed);      }    }    // 判斷當擴散圓擴散到指定寬度時添加新擴散圓    if (mWidths.get(mWidths.size() - 1) >= mMaxWidth / mDiffuseWidth) {      mAlphas.add(255);      mWidths.add(0);    }    // 超過10個擴散圓,刪除最外層    if(mWidths.size() >= 10){      mWidths.remove(0);      mAlphas.remove(0);    }    // 繪制中心圓    mPaint.setAlpha(255);    mPaint.setColor(mCoreColor);    canvas.drawCircle(getWidth() / 2, getHeight() / 2, mCoreRadius, mPaint);    if(mIsDiffuse){      invalidate();    }  }  /**   * 開始擴散   */  public void start() {    mIsDiffuse = true;    invalidate();  }  /**   * 停止擴散   */  public void stop() {    mIsDiffuse = false;    mWidths.clear();    mAlphas.clear();    mAlphas.add(255);    mWidths.add(0);    invalidate();  }  /**   * 是否擴散中   */  public boolean isDiffuse(){    return mIsDiffuse;  }  /**   * 設置擴散圓顏色   */  public void setColor(int colorId){    mColor = colorId;  }  /**   * 設置中心圓顏色   */  public void setCoreColor(int colorId){    mCoreColor = colorId;  }  /**   * 設置中心圓半徑   */  public void setCoreRadius(int radius){    mCoreRadius = radius;  }  /**   * 設置擴散圓寬度(值越小寬度越大)   */  public void setDiffuseWidth(int width){    mDiffuseWidth = width;  }  /**   * 設置最大寬度   */  public void setMaxWidth(int maxWidth){    mMaxWidth = maxWidth;  }  /**   * 設置擴散速度,值越大速度越快   */  public void setDiffuseSpeed(int speed){    mDiffuseSpeed = speed;  }}

自己添加的attrs.xml(創建在Values包底下,切勿倒錯)

 

<?xml version="1.0" encoding="utf-8"?><resources>  <!--擴散圓顏色-->  <attr name="diffuse_color" format="color"/>  <!--中心圓顏色-->  <attr name="diffuse_coreColor" format="color"/>  <!--中心圓圖片-->  <attr name="diffuse_coreImage" format="reference"/>  <!--中心圓半徑-->  <attr name="diffuse_coreRadius" format="float"/>  <!--擴散圓寬度,值越小越寬-->  <attr name="diffuse_width" format="integer"/>  <!--最大擴散寬度-->  <attr name="diffuse_maxWidth" format="integer"/>  <!--擴散速度,值越大越快-->  <attr name="diffuse_speed" format="integer"/>  <declare-styleable name="DiffuseView">    <attr name="diffuse_color"/>    <attr name="diffuse_coreColor"/>    <attr name="diffuse_coreImage"/>    <attr name="diffuse_coreRadius"/>    <attr name="diffuse_width"/>    <attr name="diffuse_maxWidth"/>    <attr name="diffuse_speed"/>  </declare-styleable></resources>

這樣就搞定了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品爽黄69| 精品无人区太爽高潮在线播放| 亚洲色图色老头| 久久黄色av网站| 久久免费视频在线观看| 欧美日韩高清在线观看| 日韩欧美高清在线视频| 日韩av中文在线| 91chinesevideo永久地址| 国产亚洲精品久久久久久777| 国产精品久久久久久av下载红粉| 国产精品久久97| 欧美日本亚洲视频| 久久影院资源站| 精品动漫一区二区| 日韩美女视频免费看| 久久久人成影片一区二区三区| 另类图片亚洲另类| 亚洲最大的网站| 一区二区三区久久精品| 亚洲欧洲黄色网| 亚洲国产精彩中文乱码av在线播放| 欧美日韩中文字幕日韩欧美| 亚洲欧美激情精品一区二区| 成人春色激情网| 国产精品美女午夜av| 4438全国亚洲精品在线观看视频| 精品视频在线观看日韩| 精品亚洲va在线va天堂资源站| 人人做人人澡人人爽欧美| 69视频在线播放| 国产亚洲激情视频在线| 久久免费视频这里只有精品| 成人日韩在线电影| 日韩精品中文字幕在线播放| 色婷婷综合久久久久中文字幕1| 成人激情视频小说免费下载| 欧美日韩国产123| 欧美性猛交xxxxx免费看| 日韩毛片在线观看| 亚洲日韩欧美视频一区| 91夜夜揉人人捏人人添红杏| 欧洲美女免费图片一区| 国产成人久久久精品一区| 国产福利视频一区| 久久久成人精品视频| 日韩小视频网址| 欧美激情一区二区三级高清视频| 欧美大片大片在线播放| 激情亚洲一区二区三区四区| 国产精品尤物福利片在线观看| 国产精品久久久久影院日本| 不卡中文字幕av| 中文字幕成人精品久久不卡| 久久综合色影院| 亚洲欧美日韩天堂| 欧美性猛交99久久久久99按摩| 日韩在线精品一区| 日本在线精品视频| 国产精品电影久久久久电影网| 国产精品视频网站| 国产精品久久久久久久久久| 欧美一区二区三区图| 久久精品国产亚洲7777| 欧美日韩亚洲视频一区| 日韩电影免费观看中文字幕| 日韩av在线一区| 国产欧美精品久久久| 久久69精品久久久久久久电影好| 日韩欧美有码在线| 国产一区玩具在线观看| 国产丝袜一区二区| 一区二区三区亚洲| 久久综合久久88| 精品国产一区二区三区久久| 亚洲一区999| 日韩av在线免播放器| 国产欧美一区二区三区久久人妖| 久久综合久久美利坚合众国| 国产伦精品一区二区三区精品视频| 成人日韩av在线| 91午夜理伦私人影院| 久久中文字幕在线视频| 97国产精品免费视频| 国产精品h在线观看| 久久国产精品亚洲| 青青青国产精品一区二区| 尤物yw午夜国产精品视频| 久久精品国产v日韩v亚洲| 国产精品一区二区三区毛片淫片| 国产日韩在线精品av| 精品国产91久久久久久| 尤物精品国产第一福利三区| 黄色精品在线看| 国产精品91视频| 亚洲第一免费播放区| 国产精品福利久久久| 欧美亚洲国产成人精品| 中国日韩欧美久久久久久久久| 久久久久久久久久亚洲| 91精品91久久久久久| 成人黄在线观看| 国产日韩视频在线观看| 成人黄色激情网| 久久视频中文字幕| 中文字幕亚洲二区| 成人精品在线视频| 日韩有码视频在线| 欧美另类暴力丝袜| 亚洲精品v欧美精品v日韩精品| 亚洲男女自偷自拍图片另类| 成人激情视频在线| 爽爽爽爽爽爽爽成人免费观看| 久久国产精品网站| 国产亚洲精品久久久久久牛牛| 欧美性极品xxxx娇小| 欧美国产日韩xxxxx| 亚洲视频精品在线| 九九热视频这里只有精品| 亚洲激情在线观看视频免费| 中文字幕av一区二区| 宅男66日本亚洲欧美视频| 欧美精品亚州精品| 国产精品免费视频xxxx| 精品一区二区三区三区| 国产va免费精品高清在线观看| 国产中文日韩欧美| 久久乐国产精品| 午夜精品久久久久久久久久久久久| 亚洲欧美日韩另类| 国产精品国产福利国产秒拍| 国语自产精品视频在线看抢先版图片| 日韩美女免费观看| 日本一区二区在线播放| 久久免费精品视频| 日韩理论片久久| 精品无人国产偷自产在线| 欧美在线精品免播放器视频| 精品欧美激情精品一区| 日韩欧美a级成人黄色| 一区二区三区视频免费在线观看| 精品国产鲁一鲁一区二区张丽| 亚洲美女精品久久| 欧美激情一区二区三级高清视频| 欧美午夜视频一区二区| 一本大道久久加勒比香蕉| 8050国产精品久久久久久| 国产精彩精品视频| 国产一区二区精品丝袜| 国产精品久久久久久久久借妻| 日韩在线播放一区| 国产激情综合五月久久| 成人激情视频网| 日韩欧美在线一区| 日韩日本欧美亚洲| 国产精品6699| 亚洲电影免费观看高清| 久久韩剧网电视剧| 精品久久国产精品| 欧美另类69精品久久久久9999| 国产精品美女www| 国产一区二区久久精品| 国产午夜精品久久久| 日本不卡免费高清视频|