自定義view實現水波紋效果

2021-08-08 02:24:34 字數 2307 閱讀 4821

參考csdn大神 啟艦的部落格自己實現了一遍,碰到的坑有2個:

1、記得呼叫mpath.reset(),否則每次的path內容會疊加在一起,就會充滿整個view ,不再出現水波紋效果;

2、**中的呼叫貝塞爾曲線的引數原理要弄明白:其實每次呼叫ondraw()方法時,呼叫了mpath.moveto(x,y),關鍵需要弄懂這裡的x的意思,我們必須保證每次moveto(x,y)的點是乙個貝塞爾曲線的起點,把該動畫想象是正弦波,我們希望每次moveto()的點都應該是原點,這樣才能完整得去確定我們即將繪製的貝塞爾曲線。所以這次的x= -dx。

import android.animation.valueanimator;

import android.content.context;

import android.graphics.canvas;

import android.graphics.color;

import android.graphics.paint;

import android.graphics.path;

import android.os.systemclock;

import android.support.annotation.nullable;

import android.util.attributeset;

import android.view.view;

import android.view.animation.linearinterpolator;

/** * created by liudong on 17-9-11.

*/public

class

rippleview

extends

view

void init()

public

rippleview(context context, @nullable attributeset attrs)

@override

protected

void

onlayout(boolean changed, int left, int top, int right, int bottom)

public

rippleview(context context, @nullable attributeset attrs, int defstyleattr)

private path mpath = new path();

private

int dx;// 0 ->viewwidth

private

int y_divide = 0;

private

int y_total = 100;

@override

protected

void

ondraw(canvas canvas)

mpath.lineto(getright(), getbottom());

mpath.lineto(0, getbottom());

mpath.close();

canvas.drawpath(mpath, paint);

}private

float dy;

int interval;

int interval_y;

private

int x;

private

boolean shouldincrete = true;

private

boolean shouldincrete_y = true;

public

void

startrippleanimation() );

animator.start();

// 利用子執行緒實現水波紋

animationthread = new thread(() -> else

if (dx < 0)

if (shouldincrete) else

if (y_divide > getheight()) else

if (y_divide < 0)

if (shouldincrete_y) else

postinvalidate();

}});

animationthread.start();

}public

boolean isstop = false;

private thread animationthread;

}

如何實現水波紋的自定義

android 水波紋 ripple 在android 5.0之後,系統會自動設定水波紋效果,但是顏色是固定的,而且只要給按鈕設定了背景顏色後,水波紋效果就沒有了。怎樣可以給自己的按鈕新增想要的背景,想要的水波紋,和自定義水波紋的顏色呢?首先建立我們正常的select檔案 然後呢 我們在res 資料...

點選水波紋效果

當布局沒有設定 background屬性的時候給其布局中加入一下 就是系統預設的水波紋效果 比如在recyclerview的item布局中,或者其他任意布局中。android background android attr selectableitembackground android click...

C語言實現水波紋效果

include include include define pic height 600 define pic width 800 void framefun 幀邏輯函式,處理每一幀的邏輯 void renderfun 幀渲染函式,輸出每一幀到顯示裝置 image src img 原位圖 imag...