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

首頁 > 系統 > Android > 正文

Android實現水波紋特效

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

最近需要做個類似于水波紋動畫的效果,思考了一下不需要UI切個動態圖,Android原生的技術利用動畫或者自定義控件都可以實現,下面上個圖類似于這樣的效果

Android,水波紋,特效

下面請看第一種動畫實現,這種方式較為簡單些,就是利用3個ImageView不斷地做縮放和漸變的動畫。

布局文件定義一下

<RelativeLayout  android:id="@+id/rl"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:gravity="center"  android:layout_marginBottom="160dp">  <!--中心imageView-->  <ImageView    android:id="@+id/iv_wave"    android:layout_width="150dp"    android:layout_height="150dp"    android:layout_centerHorizontal="true"    android:background="@drawable/shape_circle" />  <!--中間的imageView-->  <ImageView    android:id="@+id/iv_wave_1"    android:layout_width="150dp"    android:layout_height="150dp"    android:layout_centerHorizontal="true"    android:background="@drawable/shape_circle" />  <!--最外層imageView-->  <ImageView    android:id="@+id/iv_wave_2"    android:layout_width="150dp"    android:layout_height="150dp"    android:layout_centerHorizontal="true"    android:background="@drawable/shape_circle" /></RelativeLayout>

接下來中間的ImageView保持不變,通過操作另外兩個ImageView達到效果

private void setAnim1() {  AnimationSet as = new AnimationSet(true);  //縮放動畫,以中心從原始放大到1.4倍  ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f, 1.4f, 1.0f, 1.4f,      ScaleAnimation.RELATIVE_TO_SELF, 0.5f,      ScaleAnimation.RELATIVE_TO_SELF, 0.5f);  //漸變動畫  AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.5f);  scaleAnimation.setDuration(800);  scaleAnimation.setRepeatCount(Animation.INFINITE);  alphaAnimation.setRepeatCount(Animation.INFINITE);  as.setDuration(800);  as.addAnimation(scaleAnimation);  as.addAnimation(alphaAnimation);  iv1.startAnimation(as);}private void setAnim2() {  AnimationSet as = new AnimationSet(true);  //縮放動畫,以中心從1.4倍放大到1.8倍  ScaleAnimation scaleAnimation = new ScaleAnimation(1.4f, 1.8f, 1.4f, 1.8f,      ScaleAnimation.RELATIVE_TO_SELF, 0.5f,      ScaleAnimation.RELATIVE_TO_SELF, 0.5f);  //漸變動畫  AlphaAnimation alphaAnimation = new AlphaAnimation(0.5f, 0.1f);  scaleAnimation.setDuration(800);  scaleAnimation.setRepeatCount(Animation.INFINITE);  alphaAnimation.setRepeatCount(Animation.INFINITE);  as.setDuration(800);  as.addAnimation(scaleAnimation);  as.addAnimation(alphaAnimation);  iv2.startAnimation(as);}

接下來就是第二種自定義動畫實現

首先定義style文件自定義屬性--在values下創建attrs.xml文件

<declare-styleable name="SpreadView">  <!--中心圓顏色-->  <attr name="spread_center_color" format="color" />  <!--中心圓半徑-->  <attr name="spread_radius" format="integer" />  <!--擴散圓顏色-->  <attr name="spread_spread_color" format="color" />  <!--擴散間距-->  <attr name="spread_distance" format="integer" />  <!--擴散最大半徑-->  <attr name="spread_max_radius" format="integer" />  <!--擴散延遲間隔-->  <attr name="spread_delay_milliseconds" format="integer" /></declare-styleable>

接下來創建SpreadView繼承view,初始化構造方法

public SpreadView(Context context) {  this(context,null,0);} public SpreadView(Context context, @Nullable AttributeSet attrs) {  this(context, attrs,0);} public SpreadView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {  super(context, attrs, defStyleAttr);  TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SpreadView, defStyleAttr, 0);  radius = a.getInt(R.styleable.SpreadView_spread_radius, radius);  maxRadius = a.getInt(R.styleable.SpreadView_spread_max_radius, maxRadius);  int centerColor = a.getColor(R.styleable.SpreadView_spread_center_color, ContextCompat.getColor(context, R.color.colorAccent));  int spreadColor = a.getColor(R.styleable.SpreadView_spread_spread_color, ContextCompat.getColor(context, R.color.colorAccent));  distance = a.getInt(R.styleable.SpreadView_spread_distance, distance);  a.recycle();  centerPaint = new Paint();  centerPaint.setColor(centerColor);  centerPaint.setAntiAlias(true);  //最開始不透明且擴散距離為0  alphas.add(255);  spreadRadius.add(0);  spreadPaint = new Paint();  spreadPaint.setAntiAlias(true);  spreadPaint.setAlpha(255);  spreadPaint.setColor(spreadColor);}

自定義View的繪制:

@Overrideprotected void onDraw(Canvas canvas) {  super.onDraw(canvas);  for (int i = 0; i < spreadRadius.size(); i++) {    int alpha = alphas.get(i);    spreadPaint.setAlpha(alpha);    int width = spreadRadius.get(i);    //繪制擴散的圓    canvas.drawCircle(centerX, centerY, radius + width, spreadPaint);    //每次擴散圓半徑遞增,圓透明度遞減    if (alpha > 0 && width < 300) {      alpha = alpha - distance > 0 ? alpha - distance : 1;      alphas.set(i, alpha);      spreadRadius.set(i, width + distance);    }  }  //當最外層擴散圓半徑達到最大半徑時添加新擴散圓  if (spreadRadius.get(spreadRadius.size() - 1) > maxRadius) {    spreadRadius.add(0);    alphas.add(255);  }  //超過8個擴散圓,刪除最先繪制的圓,即最外層的圓  if (spreadRadius.size() >= 8) {    alphas.remove(0);    spreadRadius.remove(0);  }  //中間的圓  canvas.drawCircle(centerX, centerY, radius, centerPaint);  //延遲更新,達到擴散視覺差效果  postInvalidateDelayed(delayMilliseconds);}

最后在activity的布局文件中引用自定義屬性:

<com.example.louliang.spread.SpreadView  android:layout_width="match_parent"  android:layout_height="wrap_content"  app:spread_center_color="@color/colorAccent"  app:spread_delay_milliseconds="35"  app:spread_distance="5"  app:spread_max_radius="90"  app:spread_radius="150"  app:spread_spread_color="@color/colorAccent" />

以上兩種方法就實現了水波紋的效果,下載完整的demo請點擊鏈接,希望對大家有所幫助。

源碼下載:Android實現水波紋特效

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
狠狠躁天天躁日日躁欧美| 欧美成人在线影院| 亚洲电影免费观看高清完整版在线观看| 精品亚洲一区二区三区在线播放| 欧美在线视频免费播放| 欧美精品激情blacked18| 日韩美女免费观看| 欧美三级欧美成人高清www| 欧美国产亚洲精品久久久8v| 亚洲色图av在线| 国产精品女视频| 在线观看欧美www| 欧美另类暴力丝袜| 欧美日韩国产一区二区三区| 91中文精品字幕在线视频| 久久久亚洲成人| 亚洲毛片一区二区| 蜜月aⅴ免费一区二区三区| 久久精彩免费视频| 精品网站999www| 国产精品久久久久7777婷婷| 国内精品伊人久久| 欧美电影免费观看大全| 91精品久久久久久久久不口人| 亚洲一区二区久久久久久| 亚洲国产成人精品久久| 亚洲国产99精品国自产| 国产日韩欧美在线播放| 亚洲精品日韩欧美| 成人午夜激情网| 欧美大片大片在线播放| 精品国产一区二区三区久久| 国产成人免费91av在线| 日本国产欧美一区二区三区| 少妇精69xxtheporn| 亚洲白拍色综合图区| 欧美高清视频一区二区| 中文字幕一区日韩电影| 欧美激情精品久久久久久蜜臀| 欧美电影免费播放| 日韩欧美在线免费观看| 疯狂蹂躏欧美一区二区精品| 亚洲午夜精品久久久久久久久久久久| 国产日韩综合一区二区性色av| 亚洲国产成人在线播放| 亚洲美女精品久久| 久久视频在线观看免费| 国产一区二区三区在线| 欧美久久精品午夜青青大伊人| 久久久国产精品免费| 国产91在线播放九色快色| 欧美亚州一区二区三区| 欧美午夜www高清视频| 色av中文字幕一区| 66m—66摸成人免费视频| 91视频免费在线| 国产精品香蕉国产| 欧美日韩国产一区在线| 欧美性资源免费| 欧美国产日本高清在线| 一区二区三区久久精品| 国产精品高潮在线| 久久久久九九九九| 亚洲一区二区在线| 欧美最猛性xxxxx(亚洲精品)| 在线看日韩欧美| 国产69久久精品成人| 国产成人精品一区二区| 欧美激情久久久久| 亚洲成年人影院在线| 国内精品久久久久影院优| 国产精品99久久99久久久二8| 日韩精品在线视频观看| 日韩电影中文字幕在线观看| 中文字幕一精品亚洲无线一区| 亚洲欧洲自拍偷拍| 成人在线视频网站| 国产亚洲精品一区二区| 亚洲成人三级在线| 亚洲性日韩精品一区二区| 欧美激情精品久久久久久变态| 欧美老女人www| 欧美日韩成人免费| 久久艳片www.17c.com| yw.139尤物在线精品视频| 成人免费网站在线| 亚洲精品免费在线视频| 福利视频第一区| 亚洲视频欧洲视频| 色七七影院综合| 久久躁日日躁aaaaxxxx| 91在线国产电影| 国产综合视频在线观看| 亚洲第一免费网站| 久久久久久美女| 91国语精品自产拍在线观看性色| 日韩电影免费在线观看| 8090成年在线看片午夜| 亚洲美女av黄| 成人av在线天堂| 亚洲偷熟乱区亚洲香蕉av| 国产91精品久久久久久久| www.亚洲免费视频| 亚洲变态欧美另类捆绑| 日韩激情视频在线播放| 国产精品久久久久久久久男| 中文字幕日韩有码| 欧美剧在线观看| 一本色道久久综合狠狠躁篇的优点| 欧美另类69精品久久久久9999| 色综合久久精品亚洲国产| 欧洲精品在线视频| 在线免费观看羞羞视频一区二区| 国产精品视频公开费视频| zzijzzij亚洲日本成熟少妇| 亚洲美女av在线播放| 亚洲精品色婷婷福利天堂| 日本精品久久电影| 国产亚洲精品久久久| 午夜精品久久久久久99热软件| 久久免费视频在线观看| 欧美日韩国产精品一区二区不卡中文| 欧美激情免费看| 亚洲第一福利网站| 日韩欧美在线观看| 91啪国产在线| 97碰在线观看| 亚洲美女av黄| 欧美综合一区第一页| 亚洲人成电影网站| 欧美日韩国产丝袜另类| 欧美整片在线观看| 日韩av在线网址| 亚洲国产精品yw在线观看| 欧美一二三视频| 国产亚洲欧洲高清| 日韩欧美国产网站| 最好看的2019的中文字幕视频| 91香蕉电影院| 国产精品一区久久久| 国产亚洲综合久久| 一级做a爰片久久毛片美女图片| 欧美国产日本在线| 日韩高清人体午夜| 日日噜噜噜夜夜爽亚洲精品| 国产精品在线看| 在线播放日韩专区| 欧美性猛交xxxx乱大交蜜桃| 91av国产在线| 国产精品免费一区二区三区都可以| 国产精品美女主播| 91成人性视频| 亚洲欧洲日产国产网站| 精品小视频在线| 欧美黑人xxxx| 欧美激情videoshd| 草民午夜欧美限制a级福利片| 亚洲欧美在线看| 国产自产女人91一区在线观看| 国产精品xxx视频| 中文字幕欧美精品在线| 中文字幕精品一区二区精品| 日本aⅴ大伊香蕉精品视频| 成人免费在线视频网址|