国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現簡單水波紋效果

2019-10-21 21:41:17
字體:
來源:轉載
供稿:網友

本文為大家分享了Android實現水波紋效果展示的具體代碼,供大家參考,具體內容如下

一、效果

Android,水波紋

二、實現原理

自定義view,使用Path和貝塞爾曲線繪制,然后不斷刷新,并且改變X、Y的值

主要知識點rQuadTo的使用   

三、實現

WaveView.java

public class WaveView extends View {  private Paint mPaint;  private final Path mPath;  //波長  private int wavelength = 500;  private int originY=800;  private int dx,dy;   public WaveView(Context context, @Nullable AttributeSet attrs) {    super(context, attrs);    mPaint = new Paint();    mPath = new Path();    mPaint.setColor(Color.GREEN);    mPaint.setStrokeWidth(5);    mPaint.setStyle(Paint.Style.FILL_AND_STROKE);//    startanimation();  }    @Override  protected void onDraw(Canvas canvas) {    super.onDraw(canvas);    //重置path    mPath.reset();//    改變y的起始坐標    if(dy<originY+150){      dy+=10;    }     int halfWaveLength = wavelength / 2;    mPath.moveTo(-wavelength + dx, originY-dy);    //屏幕多寬,畫多少    for (int i = -wavelength; i <= getWidth() + wavelength; i += wavelength) {      /**       * 相對繪制二階貝塞爾曲線(相對于自己的起始點--也即是上一個曲線的終點 )       * float dx1 相對于上一個曲線的終點 的距離       * float dy1       * float dx2       * float dy2       */      mPath.rQuadTo(halfWaveLength / 2, -150, halfWaveLength, 0);      mPath.rQuadTo(halfWaveLength / 2, 150, halfWaveLength, 0);     }    //顏色填充    //畫一個封閉的空間    mPath.lineTo(getWidth(), getHeight());    mPath.lineTo(0, getHeight());    mPath.close();    canvas.drawPath(mPath, mPaint);//    //設置起始點坐標//    path.moveTo(100,400);//    //二階貝塞爾曲線1//    path.quadTo(250,200,400,400);//    //二階貝塞爾曲線2//    path.quadTo(550,600,700,400);//    //關閉路徑(將起點和終點閉合)//    path.close();//    path.moveTo(100,700);//    path.cubicTo(50,500,550,500,700,700);   }   public void startanimation() {    ValueAnimator animator = ValueAnimator.ofInt(0, wavelength);    animator.setDuration(1000);    animator.setInterpolator(new LinearInterpolator());    //無限循環    animator.setRepeatCount(ValueAnimator.INFINITE);    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {      @Override      public void onAnimationUpdate(ValueAnimator animation) {        dx = (int) animation.getAnimatedValue();        postInvalidate();      }    });    animator.start();  }}

最后把這個當成一個控件使用就可以。

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 双桥区| 海丰县| 五河县| 化德县| 新兴县| 香格里拉县| 寿光市| 长子县| 霍山县| 长子县| 景德镇市| 当涂县| 和平县| 临沧市| 买车| 绥滨县| 儋州市| 临澧县| 东乡族自治县| 济阳县| 宁波市| 桦甸市| 迭部县| 揭东县| 惠东县| 灵石县| 上饶市| 仙居县| 武威市| 凤翔县| 仙桃市| 东宁县| 恭城| 大同县| 阳江市| 水富县| 华坪县| 铜鼓县| 阜平县| 恭城| 周口市|