1. 程式人生 > >翻翻git之---自定義View實現水位上漲效果 WaveProgressView

翻翻git之---自定義View實現水位上漲效果 WaveProgressView

P1 (廢話部分,技術內容在P2)

上週陸續收到一些想嘗試性換工作的小夥伴們的簡歷,相關的負責的HR妹子已經電話轟炸過去了,如果有興趣的小夥伴可以看下http://blog.csdn.net/ddwhan0123/article/details/50756745的最下面部分,有相關職位的介紹,簡歷到QQ郵箱 [email protected]

P2 這篇介紹的 是 一個(動畫+思路)蠻不錯的 進度實現的效果

效果:
這裡寫圖片描述

how to use?

gradle:

/build.gradle檔案



jitpack.io

repositories {
    maven {
        url "https://jitpack.io"
} }

/app/build.gradle檔案



compile 'com.github.zeng1990java:WaveProgressView:1.0.5'

Eclipse:

把圈出來的地方copy下就行了,程式碼內容不多

這裡寫圖片描述

我們先來看下自定義標籤(用於初始化和設定)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="WaveProgressView">
        <attr name="waveColor"
format="color"/>
<attr name="waveBorderWidth" format="dimension"/> <attr name="waveBorderRadius" format="dimension"/> <attr name="waveAmplitude" format="dimension"/> <attr name="waveMax" format="integer"/> <attr name="waveProgress" format
="integer"/>
</declare-styleable> </resources>

大致是設定顏色啊,畫筆粗細啊,最大值啊,進度值啊,外部框體線條厚度之類的

那 如何使用呢?

<com.github.zeng1990java.widget.WaveProgressView
        android:id="@+id/wave_progress_view_2"
        android:layout_width="120dp"
        android:layout_height="80dp"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="10dp"
        android:layout_centerHorizontal="true"
        app:waveMax="100"
        app:waveColor="#3498db"
        app:waveAmplitude="8dp"
        app:waveBorderWidth="3dp"
        app:waveBorderRadius="2dp"
        />

引用下就行了 不引用的話有預設值。

大致講一下實現,這裡就不讀程式碼了 首先先獲取了一大堆引數,然後根據根據長寬高和傳入的畫筆粗細 畫外面那個空心大方框,再是根據寬度計算Y的變化繪製那個水波的效果 最後再onDraw裡畫出來就行了 我覺得6的是下面那個方法的演算法(好吧,我菜)

核心路徑繪製在updatePath()方法中

    private void updatePath() {
        this.mPath.reset();
        for (int i = 0; i < mWaveWidth; i++) {
            int x = i;
            int y = (int) clamp(
                    mAmplitude * Math.sin((i* mAngularVelocity + mAngle * Math.PI) / 180.0f) + (mWaveHeight - mWaveProgressHeight),
                    mHaftBorderRadius,
                    mWaveHeight
            );
            if (i == 0) {
                this.mPath.moveTo( x, y);
            }
            this.mPath.quadTo( x, y, x + 1, y);
        }
        this.mPath.lineTo(mWaveWidth, mWaveHeight);
        this.mPath.lineTo(0, mWaveHeight);
        this.mPath.close();
    }

其他就是一些各種set加Anim了。

再說下在Activity裡如何使用

首先,先獲取控制元件物件

   WaveProgressView waveProgressView = (WaveProgressView) findViewById(R.id.wave_progress_view);

然後進行一些簡單的設定,還可以設定顏色啊,進度值什麼的。

    waveProgressView.setMax(100);

作者在其官方的演示裡是讓動畫在不同持續時間無限迴圈的

   private void animWave(WaveProgressView waveProgressView, long duration){
        ObjectAnimator progressAnim = ObjectAnimator.ofInt(waveProgressView, "progress", 0, waveProgressView.getMax());
        progressAnim.setDuration(duration);
        progressAnim.setRepeatCount(ObjectAnimator.INFINITE);
        progressAnim.setRepeatMode(ObjectAnimator.RESTART);
        progressAnim.start();
    }

總體來說,使用起來幾乎沒難度,如果要完全獨立自己寫一個類似的控制元件的話,還是要對 Canvas Paint 以及View的繪製有一定量好的基礎才可以做出來。

相關推薦

翻翻git---定義View實現水位上漲效果 WaveProgressView

P1 (廢話部分,技術內容在P2) 上週陸續收到一些想嘗試性換工作的小夥伴們的簡歷,相關的負責的HR妹子已經電話轟炸過去了,如果有興趣的小夥伴可以看下http://blog.csdn.net/ddwhan0123/article/details/507

Android定義View——實現水波紋效果類似剩余流量球

string 三個點 pre ber block span 初始化 move 理解 最近突然手癢就想搞個貝塞爾曲線做個水波紋效果玩玩,終於功夫不負有心人最後實現了想要的效果,一起來看下吧: 效果圖鎮樓 一:先一步一步來分解一下實現的過程 需要繪制一個正弦曲線(sin

Android 定義View實現拖拽效果

騰訊QQ有那種紅點拖動效果,今天就來實現一個簡單的自定義View拖動效果,再回到原處,並非完全仿QQ紅點拖動 先來看一下效果圖 簡單說一下實現步驟 1.建立一個類繼承View 2.繪製出一個

Android 定義View實現圓形環繞效果

之前專案中需要實現一個四周環繞中心圓形頭像的效果,感覺還是自定義比較方便,於是就自己封裝了一個控制元件去實現。先貼張圖顯示最終效果。 首先自定義一個View繼承自LinearLayout,通過動態新增childView的方式將子控制元件新增到View中。思路是先新增中間圓形頭像

定義view實現水波紋效果

自定義view實現水波紋效果 參考csdn大神 啟艦的部落格http://blog.csdn.net/harvic880925/article/details/50995587,自己實現了一遍,碰到的坑有2個: 1、記得呼叫mPath.reset(),否則每次的path內容會疊

Android 定義view實現水波紋效果

今天主要分享水波紋效果:1.標準正餘弦水波紋;2.非標準圓形液柱水波紋;雖說都是水波紋,但兩者在實現上差異是比較大的,一個通過正餘弦函式模擬水波紋效果,另外一個會運用到影象的混合模式(PorterDuffXfermode);先看效果:                     

Android定義View實現水波紋效果

本篇博文介紹一個Android自定義View的案例,後續博文會接下自定義View的相關流程和繪製原理。通過自定義控制元件實現。觸控式螢幕幕實現水波紋效果。實現步驟第1步.自定義MyWave繼承Viewpublic class MyWave extends View {}第2步

Android定義View——實現水波紋效果類似剩餘流量球

最近突然手癢就想搞個貝塞爾曲線做個水波紋效果玩玩,終於功夫不負有心人最後實現了想要的效果,一起來看下吧: 效果圖鎮樓 一:先一步一步來分解一下實現的過程 需要繪製一個正弦曲線(sin)或者餘弦曲線(cos) 通過水平平移曲線來的到像水

Android:定義View實現水波進度效果

首先上效果圖: 簡介: 1.自動適應螢幕大小; 2.水波自動橫向滾動; 3.各種繪製引數可通過修改常量進行控制。 程式碼不多,註釋也比較詳細,全部貼上: (一)自定義元件: /** * 水波進度效果. */ public class WaterWaveView e

Android定義View實現圓弧進度效果

前言:Android開發中,自定義View實現自己想要的效果已成為一項必備的技能,當然自定義View也是Android開發中比較難的部分,涉及到的知識有Canvas(畫布),Paint(畫筆)等,自定義控制元件分為三種:一是直接繼承自View,完全的自定義;二是在原有控制元件

翻翻git---自己定義郵件發送buttonSendButton(流程分析,實現思路能夠學習下)

現象 date() 加速 lag restart xtend fas trace str 轉載請註明出處:王亟亟的大牛之路 距離過春節還有1天。繼續這一系列的git翻料之旅。 昨天的工具類真的非常棒,這裏再推崇一下 傳送門:http://blog.c

Android進階定義View實戰(一)仿iOS UISwitch控制元件實現

一.引言 個人覺得,自定義View一直是Android開發最變換莫測、最難掌握、最具吸引力的地方。因為它涉及到的知識點比較多,想在實際應用中駕輕就熟,由淺入深,你需要掌握以下知識點: 1. View的繪製機制以及Canvas、Paint、Rect等的常用方

Android進階定義View(1)實現可換行的TextView

         今天來一起學習一下最簡單的自定義view,自己動手寫一個MyTextView,當然不會像系統的TextView那麼複雜,只是實現一下TextView的簡單功能,包括分行顯示及自定義屬性的處理,主要目的是介紹自定義view的實現的基本思路和需要掌握的一些基礎知

我的Android進階旅------>Android定義View實現帶數字的進度條(NumberProgressBar)

今天在Github上面看到一個來自於 daimajia所寫的關於Android自定義View實現帶數字的進度條(NumberProgressBar)的精彩案例,在這裡分享給大家一起來學習學習!同時感謝daimajia的開源奉獻! 第一步、效果展

Android -- 定義view實現keep歡迎頁倒計時效果

super onfinish -m use new getc awt ttr alt 1,最近打開keep的app的時候,發現它的歡迎頁面的倒計時效果還不錯,所以打算自己來寫寫,然後就有了這篇文章。 2,還是老規矩,先看一下我們今天實現的效果   相較於我們常見的倒計時

Android高階進階定義View

前言 在網上看到一張圖,花了些時間自己嘗試著寫了一個自定義View,裡面涉及到了自定義屬性、自定義View padding屬性的處理、畫筆(Paint)和畫布(Canvas)的使用、解析度適配問題、效能問題、屬性動畫等,覺得還是有些東西值的記錄一下的,效果圖如下: 自定義屬

定義view實現圓中心顯示文字

自定義view實現:畫一個矩形 然後畫一個圓 再在圓中心顯示文字,效果如下 RectF rect = new RectF(100,100,500,500);//畫一個矩形 Paint mPaint = new Paint(); mPaint.setColor(

定義view實現抽獎轉盤

------>自定義view類 public class LotteryView extends View implements View.OnClickListener {     private Paint mPaint;     private

Android定義view實現圖片選色器

https://www.jb51.net/article/141336.htm 這篇文章主要為大家詳細介紹了Android自定義view實現圖片選色器,具有一定的參考價值,感興趣的小夥伴們可以參考一下 簡介 本文介紹該自定義view的使用及實現的方法,主要實現以下幾個功能: - 選取

定義View實現圓形進度條跳轉頁面

效果: //首先在values資料夾下建立一個attrs.xml: ?xml version=“1.0” encoding=“utf-8”?> //佈局: <?xml version="1.0" encoding="utf-8"?>