android實現波紋效果
前幾天公司需要做錄音的波紋效果,原理很簡單:定義一個記錄所有同心圓半徑的list,只要動態改變list的size,然後遍歷之,並以每一個半徑繪製圓(drawCircle), 通過在onDraw方法裡面不停invalidate就可以了,程式碼如下:
package com.example.test.util; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.View; import com.example.test.R; import java.util.ArrayList; import java.util.List; /** * Created by jisj on 6/1/16. */ public class RecordView extends View { public RecordView(Context context) { this(context, null, 0); } public RecordView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public RecordView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context = context; init(); } public void setIsWaving(boolean waving){ isWaving = waving; postInvalidate(); } private void init() { paint = new Paint(); paint.setColor(Color.parseColor("#ff6666")); paint.setAntiAlias(true); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); setMeasuredDimension(width = 600, height = 600); initOtherSize(); initStartCircle(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int count = radiusList.size(); //先繪製波紋 if(isWaving){ for (int i = 0; i < count; i++) { int radius = radiusList.get(i); float alpha = alphaList.get(i); paint.setAlpha((int) alpha); canvas.drawCircle(width / 2, height / 2, radius, paint); //寬度遞增,透明度遞減,寬度到最大時,透明度正好為0,singleAlpha保證了最外層的圓消失時不會突兀 if (alpha - singleAlpha >= 0) alphaList.set(i, alpha - singleAlpha); if (radius + 1 < this.width / 2) { radiusList.set(i, radius + 1); } } } //再繪製中間的圖片 Drawable drawable = context.getResources().getDrawable(R.drawable.center_pic); drawable.setBounds((width - centerWidth) / 2, (height - centerWidth) / 2, (width + centerWidth) / 2, (height + centerWidth) / 2); drawable.draw(canvas); if(isWaving){ //如果沒有達到最多的圓數,則加一個最內層的圓 if (count <= MAX_CIRCLE_COUNT) { //這裡的width / (MAX_CIRCLE_COUNT * 7)是相鄰波紋的半徑差值 if (radiusList.size() <= 0 || radiusList.get(radiusList.size() - 1) == centerWidth / 2 + width / (MAX_CIRCLE_COUNT * 7)) { addInnerCircle(); } } //去掉最外層的圓 if (radiusList.size() > MAX_CIRCLE_COUNT) { radiusList.remove(0); alphaList.remove(0); } //執行onDraw的不斷迴圈 postInvalidate(); } } private void initStartCircle() { clearDataList(alphaList); clearDataList(radiusList); alphaList.add(ORIGIN_ALPHA); radiusList.add(startRadius); } private void initOtherSize() { centerWidth = (int) (width * 0.54f); //startRadius比centerWidth略小,是為了保證起始圓環出場時藏在中心圖片下面,不然會太突然 startRadius = centerWidth / 2 - 30; //圓環每增加1個畫素,則透明度減低的值 singleAlpha = ORIGIN_ALPHA / ((width / 2 - startRadius)); } private void addInnerCircle() { alphaList.add(ORIGIN_ALPHA); radiusList.add(startRadius); } private void clearDataList(List list) { if (list.size() > 0) list.clear(); } private ArrayList<Float> alphaList = new ArrayList<Float>(); private ArrayList<Integer> radiusList = new ArrayList<Integer>(); private int width, height; private float singleAlpha = 1; //圓環每增加1個畫素,則透明度減低的值 private int centerWidth; //中間固定圖片的半徑 private int startRadius; //起始圓環的半徑 private boolean isWaving = false; private Paint paint; private Context context; private static final float ORIGIN_ALPHA = 150; //最內層圓環的透明度 private static final int MAX_CIRCLE_COUNT = 5; //最多的圓環數量 }
程式碼中用到的圖片,是百度搜到的,如果有侵權。。。。。對不起啊大哥
相關推薦
android實現波紋效果
前幾天公司需要做錄音的波紋效果,原理很簡單:定義一個記錄所有同心圓半徑的list,只要動態改變list的size,然後遍歷之,並以每一個半徑繪製圓(drawCircle), 通過在onDraw方法裡面不停invalidate就可以了,程式碼如下: package c
android 水波紋效果實現
drawable color utf true odi lec .com enc orm 1.在drawable文件下,新建seletor,作為button的背景,這裏我用的是兩個圓角的shape <?xml version="1.0" encoding="utf-
Android 水波紋效果實現並且適配API21以下
前言 水波紋的點選效果還是很不錯的,使用起來也很簡單,但是在API21,Android5.0以下使用水波紋效果會直接崩潰,所以我們得考慮到適配 1、在res裡建立drawable-v21資料夾,在該資料夾下建立一個xml檔案 <!-- color_106是一個淺灰色的
Android 水波紋效果
今天翻看部落格,發現了水波紋效果。順便研究了一下 一,Touch Feedback(觸控反饋) 1,原始自帶效果 程式碼: <Button android:layout_width="wrap_content" an
Android 實現Ripple效果。
這篇是網上程式碼整理。(小白只會改皮毛,核心程式碼網上拿來) 首先: public class RippleBackground extends RelativeLayout { private static final int DEFAULT
Android 實現映象效果
一、解析 —————————————————– 1、首先定義兩張圖片: Bitmap bm = BitmapFactory.decodeResource(getResources(), R.dra
Android實現動畫效果之淡入淡出
QQ群:372135639 View漸隱動畫效果 /** * View漸隱動畫效果 */ public void setHideAnimation( View view, int duration) {
Android自定義View——實現水波紋效果類似剩余流量球
string 三個點 pre ber block span 初始化 move 理解 最近突然手癢就想搞個貝塞爾曲線做個水波紋效果玩玩,終於功夫不負有心人最後實現了想要的效果,一起來看下吧: 效果圖鎮樓 一:先一步一步來分解一下實現的過程 需要繪制一個正弦曲線(sin
Android 設定主題實現點選波紋效果
開頭先說說大家都知道的Material Design。 這裡推薦大苞米的系列部落格,介紹的很全面。 http://blog.csdn.net/a396901990/article/category/2634371 Material Design: &
Android 實現所有View的點選水波紋效果
點選水波紋效果,是安卓5.0以上的一個新特技。 一開始,我只會在普通的Button上新增這個效果。 利用新建主題的方法: <style name="MyButton" parent="Theme.AppCompat.Light"> <item n
Android實現水波紋外擴效果
微信曾經推出了一個查詢附近好友的功能,大致功能是這樣的:螢幕上有一個按鈕,長按按鈕的時候,會有一圈圈水波紋的動畫向外擴散,鬆手後,動畫結束。 現在簡單來實現這樣的一個動畫功能: 思路: 主要用到了下面的藍色的圖片,定義三個ImageView,background都設定為藍色
android水波紋漣漪效果的實現 ---- 入門+初步提高
android水波紋漣漪效果的實現<入門+初步提高> 作為一個android開發著,水波紋效果是常見的效果,可以優化ui提高使用者的互動,在android5.0之前是不會自帶水波紋的,隨著material design的提出水波紋不僅僅被用於btn
Android 實現水波紋效果
一、首先還是先上效果 二、實現原理 自定義view,使用Path和貝塞爾曲線繪製,然後不斷重新整理,並且改變X、Y的值 主要知識點rQuadTo的使用 三、實現 WaveView.java public class WaveView extends V
Android 自定義view實現水波紋效果
今天主要分享水波紋效果:1.標準正餘弦水波紋;2.非標準圓形液柱水波紋;雖說都是水波紋,但兩者在實現上差異是比較大的,一個通過正餘弦函式模擬水波紋效果,另外一個會運用到影象的混合模式(PorterDuffXfermode);先看效果:
android 實現水波紋效果(二) 優化篇
在我的上一篇文章中,初步介紹了一下水波紋的實現,確實也實現了,剛開始我表示很滿意啊,但是後來看了一下系統的實現效果,我開始發現有點不對勁;來對比一下: 這是優化前的效果 這是優化後的效果 區別看不出來?仔細看一下,系統的實現效果是
Android自定義View實現水波紋效果
本篇博文介紹一個Android自定義View的案例,後續博文會接下自定義View的相關流程和繪製原理。通過自定義控制元件實現。觸控式螢幕幕實現水波紋效果。實現步驟第1步.自定義MyWave繼承Viewpublic class MyWave extends View {}第2步
Android自定義View——實現水波紋效果類似剩餘流量球
最近突然手癢就想搞個貝塞爾曲線做個水波紋效果玩玩,終於功夫不負有心人最後實現了想要的效果,一起來看下吧: 效果圖鎮樓 一:先一步一步來分解一下實現的過程 需要繪製一個正弦曲線(sin)或者餘弦曲線(cos) 通過水平平移曲線來的到像水
Android——實現漸變色水波紋效果原始碼
專案中使用到的效果,效果圖如下: 程式碼實現: public class WaveView extends View { private Paint mPaint, mCriclePaint, mTextPaint; // 傾斜或旋轉、快速變化,當在螢幕上
在Android中實現陰影效果
sta 技術 wid 語言 mat floating 大表 ado sch 在Android L推出後,Google提出了全新的設計語言:材質設計。其中很重要的一點就是陰影效果的使用,你可以為每一個View設置一個elevation值,相當於除了x、y之外的z值,z值決定
Android 按鍵按下實現陰影效果
nal turn view font .cn ges activity rda als final Button btn_gallery=(Button)findViewById(R.id.btn_gallery);btn_gallery.setOnClickListene