Android 水波紋擴散效果
1.效果圖:
2.使用方法:
在xml裡使用RippleImageView自定義控制元件:
xmlns:app="http://schemas.android.com/apk/res-auto" <com.army.rippleimage.RippleImageView android:id="@+id/rippleImageView" android:layout_width="match_parent" android:layout_height="180dp" android:background="#37B158" app:show_spacing_time="800"//動畫播放間隔時間 app:imageViewWidth="35dp"//圖片的大小 app:imageViewHeigth="35dp" android:layout_centerHorizontal="true"> </com.army.rippleimage.RippleImageView>
在Activity中的使用:
rippleImageView=(RippleImageView)findViewById(R.id.rippleImageView); //開始動畫 rippleImageView.startWaveAnimation(); //停止動畫 rippleImageView.stopWaveAnimation();
3.如何將自定義控制元件引入到專案:
拷貝自定義控制元件RippleImageView
/** * Description : * Author : liujun * Email : [email protected] */ public class RippleImageView extends RelativeLayout { private static final int SHOW_SPACING_TIME=700; private static final int MSG_WAVE2_ANIMATION = 1; private static final int MSG_WAVE3_ANIMATION = 2; private static final int IMAMGEVIEW_SIZE = 80; /**三張波紋圖片*/ private static final int SIZE =3 ; /**動畫預設迴圈播放時間*/ private int show_spacing_time=SHOW_SPACING_TIME; /**初始化動畫集*/ private AnimationSet [] mAnimationSet=new AnimationSet[SIZE]; /**水波紋圖片*/ private ImageView [] imgs=new ImageView[SIZE]; /**背景圖片*/ private ImageView img_bg; /**水波紋和背景圖片的大小*/ private float imageViewWidth=IMAMGEVIEW_SIZE; private float imageViewHeigth=IMAMGEVIEW_SIZE; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_WAVE2_ANIMATION: imgs[MSG_WAVE2_ANIMATION].startAnimation(mAnimationSet[MSG_WAVE2_ANIMATION]); break; case MSG_WAVE3_ANIMATION: imgs[MSG_WAVE2_ANIMATION].startAnimation(mAnimationSet[MSG_WAVE3_ANIMATION]); break; } } }; public RippleImageView(Context context) { super(context); initView(context); } public RippleImageView(Context context, AttributeSet attrs) { super(context, attrs); getAttributeSet(context,attrs); initView(context); } /** * 獲取xml屬性 * @param context * @param attrs */ private void getAttributeSet(Context context, AttributeSet attrs) { TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.custume_ripple_imageview); show_spacing_time = typedArray.getInt(R.styleable.custume_ripple_imageview_show_spacing_time, SHOW_SPACING_TIME); imageViewWidth = typedArray.getDimension(R.styleable.custume_ripple_imageview_imageViewWidth, IMAMGEVIEW_SIZE); imageViewHeigth = typedArray.getDimension(R.styleable.custume_ripple_imageview_imageViewHeigth, IMAMGEVIEW_SIZE); Log.d("TAG","show_spacing_time="+show_spacing_time+"mm imageViewWidth="+imageViewWidth+"px imageViewHeigth="+imageViewHeigth+"px"); typedArray.recycle(); } private void initView(Context context) { setLayout(context); for (int i = 0; i <imgs.length ; i++) { mAnimationSet[i]=initAnimationSet(); } } /** * 開始動態佈局 */ private void setLayout(Context context) { LayoutParams params=new LayoutParams(dip2px(context,imageViewWidth),dip2px(context,imageViewHeigth)); //新增一個規則 params.addRule(RelativeLayout.CENTER_IN_PARENT,RelativeLayout.TRUE); /**新增水波紋圖片*/ for (int i = 0; i <SIZE ; i++) { imgs[i] = new ImageView(context); imgs[i].setImageResource(R.mipmap.point_empty); addView(imgs[i],params); } LayoutParams params_bg=new LayoutParams(dip2px(context,imageViewWidth)+10,dip2px(context,imageViewHeigth)+10); //新增一個規則 params_bg.addRule(RelativeLayout.CENTER_IN_PARENT,RelativeLayout.TRUE); /**新增背景圖片*/ img_bg=new ImageView(context); img_bg.setImageResource(R.mipmap.point_org); addView(img_bg,params_bg); } /** * 初始化動畫集 * @return */ private AnimationSet initAnimationSet() { AnimationSet as = new AnimationSet(true); //縮放度:變大兩倍 ScaleAnimation sa = new ScaleAnimation(1f, 2f, 1f, 2f, ScaleAnimation.RELATIVE_TO_SELF, 0.5f, ScaleAnimation.RELATIVE_TO_SELF, 0.5f); sa.setDuration(show_spacing_time * 3); sa.setRepeatCount(Animation.INFINITE);// 設定迴圈 //透明度 AlphaAnimation aa = new AlphaAnimation(1, 0.1f); aa.setDuration(show_spacing_time * 3); aa.setRepeatCount(Animation.INFINITE);//設定迴圈 as.addAnimation(sa); as.addAnimation(aa); return as; } private static int dip2px(Context context, float dipValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f); } //============================對外暴露的public方法========================================= /** * 開始水波紋動畫 */ public void startWaveAnimation() { imgs[0].startAnimation(mAnimationSet[0]); mHandler.sendEmptyMessageDelayed(MSG_WAVE2_ANIMATION, show_spacing_time); mHandler.sendEmptyMessageDelayed(MSG_WAVE3_ANIMATION, show_spacing_time * 2); } /** * 停止水波紋動畫 */ public void stopWaveAnimation() { for (int i = 0; i <imgs.length ; i++) { imgs[i].clearAnimation(); } } /**獲取播放的速度*/ public int getShow_spacing_time() { return show_spacing_time; } /**設計播放的速度,預設是800毫秒*/ public void setShow_spacing_time(int show_spacing_time) { this.show_spacing_time = show_spacing_time; }
}
拷貝自定義屬性到arrts下
<declare-styleable name="custume_ripple_imageview"> <attr name="show_spacing_time" format="integer"></attr> <attr name="imageViewWidth" format="dimension"></attr> <attr name="imageViewHeigth" format="dimension"></attr> </declare-styleable>
拷貝預設圖片
相關推薦
Android 水波紋擴散效果
1.效果圖: 2.使用方法: 在xml裡使用RippleImageView自定義控制元件: xmlns:app="http://schemas.android.com/apk/res-auto" <com.army.rippleima
Android 點選水波紋擴散效果( Ripple Effect )
<span style="font-family: Arial, Helvetica, sans-serif;"><pre style="font-family: 宋體; font-size: 9pt; background-color: rgb(255,
android水波紋漣漪效果的實現 ---- 入門+初步提高
android水波紋漣漪效果的實現<入門+初步提高> 作為一個android開發著,水波紋效果是常見的效果,可以優化ui提高使用者的互動,在android5.0之前是不會自帶水波紋的,隨著material design的提出水波紋不僅僅被用於btn
android 水波紋效果實現
drawable color utf true odi lec .com enc orm 1.在drawable文件下,新建seletor,作為button的背景,這裏我用的是兩個圓角的shape <?xml version="1.0" encoding="utf-
Android水波紋點選效果
轉:Android水波紋點選效果 Android API 21及以上新增了ripple標籤用來實現水波紋的效果。我們可以通過設定ripple背景來實現一些View點選效果。 水波紋樣圖 1. 水波紋效果實現 1)系統效果 系統有界效果 在API 21以上使用,才有波紋效果;
Android 水波紋效果
今天翻看部落格,發現了水波紋效果。順便研究了一下 一,Touch Feedback(觸控反饋) 1,原始自帶效果 程式碼: <Button android:layout_width="wrap_content" an
Android 水波紋顯示進度效果
關於水波紋的效果想必大家見的已經很多了,我就在這裡再囉嗦一次,為了加深自己的印象。先來看看效果圖 關於這個效果的實現不必想的太過複雜了,要想實現這個效果,我們還需要了解一下PorterDuff及Xfermode 關於上面的這張圖想必大家也見過很多次了
Android貝塞爾曲線實現水波紋的效果
前兩天朋友找我實現一個水波紋的效果,因為這塊一直沒做過,所以花了一上午時間研究一下,參考了網上的一些方法,得知Android還有Path.quadTo()這麼一個方法。 話不多說,程式碼如下: public class MyView extends View implem
Android 水波紋效果實現並且適配API21以下
前言 水波紋的點選效果還是很不錯的,使用起來也很簡單,但是在API21,Android5.0以下使用水波紋效果會直接崩潰,所以我們得考慮到適配 1、在res裡建立drawable-v21資料夾,在該資料夾下建立一個xml檔案 <!-- color_106是一個淺灰色的
週末閒著無聊分享一個自己寫的帶呼吸效果的android水波紋自定義view
無圖無真相,廢話不多說先來看看最終效果: 用法: 1.匯入自定義屬性檔案(將這個檔案放在 res/values 下) attrs.xml <span style="font-size:18px;"><?xml version="1.0" encodi
Android 水波紋點選效果(Ripple Effect)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="ma
Android RecyclerView 實現item點選水波紋動畫效果
Recyclerview的item如果如果加上水波紋動畫的點選效果會使列表的ui體驗效果提升很多,今天來給大家介紹一下如何給Recyclerivew的item view新增這樣的動畫效果。 在res目錄的drawable目錄和drawable-v21下分別建立
UWP:使用Composition實現類似安卓的水波紋Ripple效果
nal tcl sset .cn math point ont .com ubi 原文:UWP:使用Composition實現類似安卓的水波紋Ripple效果先放效果圖: 首先,建立一個RippleHelper.cs文件,然後建立以下附加屬性: IsFillEnab
Android 水波紋特效
先看一下動畫效果:第一次上傳gif圖片 先錄的mp4視訊 後來轉的gif Android動畫在這裡就不詳細講了,網上一大把,不清楚的可以去看看。這裡只講這個動畫的視線邏輯。 這個動畫這裡分四個部分: 1.最底部圖片心跳動畫 2.水波紋擴散動畫 3.頭像出現的時機動畫 4.
自定義控制元件三部曲之繪圖篇(二十)——RadialGradient與水波紋按鈕效果
前言:每當感嘆自己的失敗時,那我就問你,如果讓你重新來一次,你會不會成功?如果會,那說明並沒有拼盡全力。 系列文章: 最近博主實在是太忙了,部落格更新實在是太慢了,真是有愧大家。 這篇將是Shader的最後一篇,下部分,我們將講述Canvas變
安卓實現水波紋動畫效果
步驟1: 首先如果想實現上圖的動畫效果,首先新建一個類然後去繼承view,然後重寫裡面的構造方法(切記選擇裡面帶有兩個 引數的構造方法,因為佈局檔案中需要用到這個類,一般需要在佈局檔案中用到的類都會選擇帶有兩個引數的構造方 法),然後在佈局檔案中引用這個類就行了,如下我的
水波紋進度效果——萬能的github
首先宣告,這篇blog並沒有什麼技術含量,完全是小弟在開發中遇到的蛋疼的問題,大神勿噴,前幾天遇到介面中要求實現水波紋進度的特效,當時我就懵逼了,這尼瑪,設計師真是腦洞大開,不過有點像360的那個,你懂
ShadowLayout的用法--自定義控制元件--按鈕---水波紋的效果
現在隨著android 的版本的更新迭代,很多東西寫的越來越完善,越來越複雜, 因此, 無論企業還是個人的發展, 追求完美的心態一定要有. 就一個簡單的按鈕,都要力求完美, 追求更高的使用者體驗. 下面我介紹一下ShadowLayout的用法: 先上效果圖:
echarts 單獨實現水波紋漣漪效果
效果: 上程式碼可以直接在 echarts 示例中執行 ( 建立在直角系中 ): var option = { xAxis : [ { boundaryGap:false,
Android 自定義View一個控制元件搞定多種水波紋漣漪擴散效果
效果圖 實現思路 這個效果實現起來並不難,重要的是思路 此View滿足了多種水波紋漣漪擴散效果,這要求它能滿足很多的變化 根據上面的樣式,可以看出此View需要滿足以下變化 圓圈從中心可迴圈向外擴散 圓圈之間的擴散間距可以改變 可控制擴散圓的