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

首頁 > 系統(tǒng) > Android > 正文

Android自定義view實(shí)現(xiàn)圓的擴(kuò)散效果

2019-10-21 21:26:08
字體:
供稿:網(wǎng)友

本文實(shí)例為大家分享了Android自定義View的實(shí)現(xiàn)水波紋,供大家參考,具體內(nèi)容如下

一、實(shí)現(xiàn)效果

Android,view,擴(kuò)散

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="開始擴(kuò)散"/>  <Button    android:id="@+id/button2"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_marginTop="10dp"    android:text="停止擴(kuò)散"/></LinearLayout>

MainActivity中的點(diǎn)擊事件

 

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 {  /** 擴(kuò)散圓圈顏色 */  private int mColor = getResources().getColor(R.color.colorAccent);  /** 圓圈中心顏色 */  private int mCoreColor = getResources().getColor(R.color.colorPrimary);  /** 中心圓半徑 */  private float mCoreRadius = 150;  /** 擴(kuò)散圓寬度 */  private int mDiffuseWidth = 3;  /** 最大寬度 */  private Integer mMaxWidth = 255;  /** 擴(kuò)散速度 */  private int mDiffuseSpeed = 5;  /** 是否正在擴(kuò)散中 */  private boolean mIsDiffuse = false;  // 透明度集合  private List<Integer> mAlphas = new ArrayList<>();  // 擴(kuò)散圓半徑集合  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) {    // 繪制擴(kuò)散圓    mPaint.setColor(mColor);    for (int i = 0; i < mAlphas.size(); i ++) {      // 設(shè)置透明度      Integer alpha = mAlphas.get(i);      mPaint.setAlpha(alpha);      // 繪制擴(kuò)散圓      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);      }    }    // 判斷當(dāng)擴(kuò)散圓擴(kuò)散到指定寬度時(shí)添加新擴(kuò)散圓    if (mWidths.get(mWidths.size() - 1) >= mMaxWidth / mDiffuseWidth) {      mAlphas.add(255);      mWidths.add(0);    }    // 超過10個(gè)擴(kuò)散圓,刪除最外層    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();    }  }  /**   * 開始擴(kuò)散   */  public void start() {    mIsDiffuse = true;    invalidate();  }  /**   * 停止擴(kuò)散   */  public void stop() {    mIsDiffuse = false;    mWidths.clear();    mAlphas.clear();    mAlphas.add(255);    mWidths.add(0);    invalidate();  }  /**   * 是否擴(kuò)散中   */  public boolean isDiffuse(){    return mIsDiffuse;  }  /**   * 設(shè)置擴(kuò)散圓顏色   */  public void setColor(int colorId){    mColor = colorId;  }  /**   * 設(shè)置中心圓顏色   */  public void setCoreColor(int colorId){    mCoreColor = colorId;  }  /**   * 設(shè)置中心圓半徑   */  public void setCoreRadius(int radius){    mCoreRadius = radius;  }  /**   * 設(shè)置擴(kuò)散圓寬度(值越小寬度越大)   */  public void setDiffuseWidth(int width){    mDiffuseWidth = width;  }  /**   * 設(shè)置最大寬度   */  public void setMaxWidth(int maxWidth){    mMaxWidth = maxWidth;  }  /**   * 設(shè)置擴(kuò)散速度,值越大速度越快   */  public void setDiffuseSpeed(int speed){    mDiffuseSpeed = speed;  }}

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

 

<?xml version="1.0" encoding="utf-8"?><resources>  <!--擴(kuò)散圓顏色-->  <attr name="diffuse_color" format="color"/>  <!--中心圓顏色-->  <attr name="diffuse_coreColor" format="color"/>  <!--中心圓圖片-->  <attr name="diffuse_coreImage" format="reference"/>  <!--中心圓半徑-->  <attr name="diffuse_coreRadius" format="float"/>  <!--擴(kuò)散圓寬度,值越小越寬-->  <attr name="diffuse_width" format="integer"/>  <!--最大擴(kuò)散寬度-->  <attr name="diffuse_maxWidth" format="integer"/>  <!--擴(kuò)散速度,值越大越快-->  <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>

這樣就搞定了。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产成人精品18| 精品久久久久久久久久久国产字幕| 狠狠入ady亚洲精品| 欧美国产专区| 国产高清精品二区| 国产成人avxxxxx在线看| 亚洲第一福利在线观看| 日韩亚洲天堂| 午夜激情一区二区三区| 极品人妻videosss人妻| 成人欧美在线| 亚洲高清视频在线观看| 你懂的在线视频观看| 这里只有精品国产| 成人性生交大片免费看视频在线| 亚洲人挤奶视频| 亚洲一区二区三区中文字幕在线| 在线播放免费| 激情av一区| 中文字幕欧美精品日韩中文字幕| 亚洲国产成人精品无码区99| 国产亚洲色婷婷久久99精品91| 综合久久给合久久狠狠狠97色| 久久久久久久一区二区三区| 黄色美女久久久| 日韩精品中文字幕一区二区| 亚洲国产视频直播| 污污视频在线看| 久久久免费在线观看| 欧美性极品videosbest| 人人妻人人爽人人澡人人精品| 国产人妻精品午夜福利免费| 宅男av一区二区三区| 日本xxxxxwwwww| 尤物tv国产一区| 视频二区一区| 农村少妇久久久久久久| 69成人免费视频| 欧美成人精品欧美一| 欧美18—20岁hd第一次| 国产亚洲精品福利| 成全视频全集| 毛片在线网址播放| 又嫩又硬又黄又爽的视频| 欧美—级在线免费片| 青青草视频在线观看| 精品网站www| 正在播放一区二区三区| 91导航在线观看| 精彩视频一区二区| 免费在线观看一级毛片| 国产成人亚洲综合色影视| a中文在线播放| 国产一区二区三区视频播放| 午夜在线精品偷拍| 亚洲福利久久| 亚洲精品xxxx| 成年网站在线看| 精品乱人伦一区二区三区| 2021中文字幕在线| jizz在线免费观看| 99在线精品免费视频九九视| 在线观看美女网站大全免费| 日本丰满少妇xxxx| 亚洲大尺度在线观看| 91免费版视频| 精品日本高清在线播放| 在线观看中文| 国产精品乱人伦中文| 亚洲视频在线观看一区二区| 欧美在线观看网址综合| a v视频在线观看| 国产亚洲精久久久久久| 老女人性淫交视频| 久久亚洲一区二区三区四区五区高| 丰满岳妇乱一区二区三区| 欧美一区二区国产| 你懂的视频在线观看资源| 亚洲一区二区三区影院| 亚洲精品在线网站| 午夜电影一区二区三区| 激情综合色丁香一区二区| 中文字幕在线观看2018| 国产女精品视频网站免费| 91在线播放观看| www.亚洲.com| 午夜激情福利网| 国产精品天干天干在观线| 天堂视频在线| 亚洲深夜影院| 欧美 日韩 国产 成人 在线| 国产精品免费视频一区| 麻豆免费版在线观看| 精品1卡二卡三卡四卡老狼| 91av资源网| 精品一区二区精品| 三级毛片网站| 青青草自拍偷拍| 国产三级欧美三级日产三级99| 四虎影院在线免费播放| 九色porny丨精品自拍视频| 色诱女教师一区二区三区| julia中文字幕久久亚洲蜜臀| 亚洲啪啪91| 国产精品高潮呻吟久久av野狼| 综合欧美亚洲日本| 婷婷丁香久久五月婷婷| 黑人性受xxxx黑人xyx性爽| 国产精品白丝jk白祙| 亚洲天堂av在线免费| 日本国产中文字幕| 高清1区2区| 在线不卡亚洲| 亚洲狠狠婷婷综合久久久久图片| 懂色av一区二区三区四区五区| 国产日产一区二区三区| 美女精品一区最新中文字幕一区二区三区| 热久久视久久精品18亚洲精品| 天天骑天天干| 日本亚洲最大的色成网站www| 亚洲一区二区乱码| 欧美激情18p| 91av视频| 免费的av网站| 亚洲www视频| 久久人人97超碰国产公开结果| 欧美日韩国产精品激情在线播放| 一个人看的www在线免费观看| 亚洲国产精品123| 动漫av在线免费观看| 91精品国产自产精品男人的天堂| 视频一区国产精品| 天天射天天爱天天射干| 国产三级视频在线播放线观看| 一级片视频在线观看| 国产传媒免费在线观看| 成人一级片在线观看| 久久婷婷麻豆| 日韩在线播放一区二区| 91精品国产入口| 久久久www成人免费毛片麻豆| 久久综合久色欧美综合狠狠| 长河落日免费高清观看| 日韩中文影院| 国产日韩欧美一区二区三区综合| 亚洲日本精品一区| 亚洲伊人婷婷| 国内成人在线| 性欧美xxxx大乳国产app| 污视频网站免费在线观看| 嗯~啊~轻一点视频日本在线观看| 国产一区二区三区四区hd| 五月婷婷在线观看| www日本高清| 中文字幕日韩av综合精品| 成人国产激情在线| 不卡视频一二三四| 色狠狠久久aa北条麻妃| 作爱视频免费观看视频在线播放激情网| 高清亚洲高清| 合欧美一区二区三区| 精品国产一区二区三区四区vr| 国产又爽又黄免费软件| 亚州欧美日韩中文视频| 一本久道在线| 三级全黄视频| 精品影院一区| 欧美日韩午夜精品| 99riav视频一区二区| 日韩午夜黄色| 国产小视频在线观看| 天堂网www在线中文天堂| 九色视频在线观看| 综合分类小说区另类春色亚洲小说欧美| 尤物视频在线观看网站| 亚洲精品乱码久久久久久日本蜜臀| 欧美中文字幕视频| 欧美精品国产精品| 国产精品无码久久av| 国产精品狼人久久影院观看方式| 一二三不卡视频| 五月天精品一区二区三区| 黄视频在线免费看| 久久免费成人精品视频| 亚洲澳门在线| 国产一区电影| 黄色视屏在线免费观看| 岛国片在线观看| 免费欧美在线视频| 成人c视频免费高清在线观看| 中文字幕一区二区三区乱码| 91成人免费网站| 中文乱码免费一区二区三区下载| 国产午夜精品久久久久久免费视| 四虎国产精品免费久久5151| 国产在线视频福利| av免费看大片| 国模吧视频一区| 日本a级片在线观看| 久久午夜福利电影| av高清在线观看| 婷婷另类小说| 国产精久久久久久| 7777精品久久久大香线蕉小说| 国产精品91久久久久久| 2019中文字幕免费视频| 国产伦精品一区二区三| 福利一区视频在线观看| 亚洲大奶少妇| av无码精品一区二区三区宅噜噜| 四虎影院在线域名免费观看| 国产这里只有精品| 免费在线激情视频| 国产精品主播在线观看| 天天爱天天做天天操| 欧美成人三级伦在线观看| 99久久er| 最近中文字幕2019免费| 奇米四色…亚洲| 国产一区二区高清视频| 国产一区二区在线观看免费| 欧美日韩成人激情| 国产三级精品三级在线专区| 色欲人妻综合网| 欧美视频免费| 伊人久久大香线蕉av超碰| 四虎影院在线播放| 欧美在线 | 亚洲| 久久九九电影| 日韩亚洲一区中文字幕| 国产91精品视频在线观看| 国产精品久久久av久久久| 在线日本高清免费不卡| 精品国产网站| 五月激情丁香一区二区三区| 久久久噜久噜久久综合| 综合久久99| 国产精品 日韩| 黄页免费在线| 五月天激情小说| 亚洲精品18p| 亚洲欧美综合国产精品一区| 日本免费高清一区| 国产一级精品视频| 成人欧美一区二区三区在线湿哒哒| 国产美女在线一区二区三区| 日韩欧乱色一区二区三区在线| 亚洲一卡二卡三卡四卡无卡网站在线看| 免费搞黄视频| 午夜激情影院| 日本一本二本在线观看| 国产白袜脚足j棉袜在线观看| 水野朝阳av一区二区三区| 97精品电影院| 自由日本语亚洲人高潮| 精品国产一区二区三区久久影院| 日本影音先锋电影| 天天做天天摸天天爽国产一区| 久久精品国产精品亚洲精品色| 自拍视频在线| 亚洲三区在线观看无套内射| 日本免费一区二区六区| 亚洲精品视频在线播放| 日本24小时在线高清视频| 久久久久久久999精品视频| 亚洲精品一区二区18漫画| 亚洲欧美成人一区| 美女精品在线观看| 日韩精品成人在线观看| 97se亚洲国产综合在线| 一区三区二区视频| 丁香一区二区三区| xxx欧美尤物xxx| 国产一区二区视频在线观看| 69久久精品无码一区二区| 大陆一级毛片免费观看| 精品成人一区| **精品中文字幕一区二区三区| 午夜私人影院久久久久| 九色自拍视频在线观看| 91亚洲人电影| 欧美精品一区二区久久久| 一区视频在线播放| 女人让男人操自己视频在线观看| 韩国av电影免费观看| 亚洲美女免费精品视频在线观看| 国产精品99精品无码视亚| 国产精品婷婷| 久久久久国产精品夜夜夜夜夜| 国产91露脸中文字幕在线| 最近中文字幕在线观看视频| 欧美视频一区在线| 人妻少妇被粗大爽9797pw| 精品女同一区二区三区在线观看| 六月丁香色婷婷| 亚洲男人的天堂在线| 风间由美性色一区二区三区| 日本不卡二三区| 久久精品成人一区二区三区蜜臀| 日韩av不卡一区二区| 亚洲国产精品中文| 成人一级片免费看| 国产亚洲一区二区三区| 97人妻精品一区二区三区动漫| 欧美日韩精品中文字幕| av影片在线播放| 国产精品揄拍500视频| 精品国产免费一区二区三区四区| 国产精品久久久久av福利动漫| 日韩色淫视频| 免费av观看网址| 久久mv成人精品亚洲动漫| www.久久网| 中文字幕不卡的av| 久久久久亚洲精品| 女仆av观看一区| 日韩精品1区| 国产在线不卡视频| 黄页网站在线观看| 亚洲精品视频啊美女在线直播| 日韩一区二区三区高清在线观看| 一区二区影院| 久久久久久国产精品三级玉女聊斋| 最近日韩免费视频| 国产精品久久中文字幕| 日韩一区二区三区在线观看| 97色伦图片97色伦在线电影| 精品女厕一区二区三区|