效果图

android 自定义控件实现波浪效果(八)_第1张图片

第一步:新建文件WaveView 继承View

packagecom.rong.activity;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;importandroid.content.Context;importandroid.graphics.Canvas;importandroid.graphics.Color;importandroid.graphics.DrawFilter;importandroid.graphics.Paint;importandroid.graphics.PaintFlagsDrawFilter;importandroid.util.AttributeSet;importandroid.util.Log;importandroid.view.View;/***自定义控件实现波浪效果*@author徐荣**/publicclassWaveViewextendsView{//画笔privatePaintmPaint;//抗锯齿privateDrawFiltermDrawFilter;//屏宽privateintscreenWidth;//屏高privateintscreenHeight;//波浪点的列表privateList<Float>postions;//临时列表privateList<Float>temps=newArrayList<Float>();//循环周期privatefloatmCycle;//浪高privateintWAVEHEIGHT=100;//速度privateintmSpeed=20;publicWaveView(Contextcontext,AttributeSetattrs){super(context,attrs);//初始化画笔mPaint=newPaint();mPaint.setAntiAlias(true);mPaint.setColor(Color.BLUE);mDrawFilter=newPaintFlagsDrawFilter(0,Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);}@OverrideprotectedvoidonSizeChanged(intw,inth,intoldw,intoldh){super.onSizeChanged(w,h,oldw,oldh);//获取屏幕宽高screenWidth=getMeasuredWidth();screenHeight=getMeasuredHeight();//初始化周期mCycle=(float)(2*Math.PI/screenWidth);postions=newArrayList<Float>();for(inti=0;i<screenWidth;i++){//初始化波浪点floatposition=(float)(WAVEHEIGHT*Math.sin(mCycle*i)+0);postions.add(position);Log.i("position",i+"=="+position);}}@OverrideprotectedvoidonDraw(Canvascanvas){super.onDraw(canvas);//drawcanvas.setDrawFilter(mDrawFilter);drawWave(canvas);}publicvoiddrawWave(Canvascanvas){for(inti=0;i<postions.size();i++){//话竖线canvas.drawLine(i,screenHeight-postions.get(i)-2*WAVEHEIGHT,i,screenHeight,mPaint);}//清空临时数据temps.clear();intnowPosition=0;Iterator<Float>iterator=postions.iterator();while(iterator.hasNext()){//交换临时点的位置temps.add(iterator.next());iterator.remove();nowPosition=nowPosition+1;if(nowPosition==mSpeed){break;}}postions.addAll(temps);//重绘,会调用OnDraw方法invalidate();}}

第二步新建布局文件activity_main.xml

<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/main_touchlayout"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ffffff"android:orientation="vertical"><com.rong.activity.WaveViewandroid:id="@+id/main_touchview"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_centerInParent="true"/></RelativeLayout>


更多相关文章

  1. android初始化
  2. android6.0源码分析之Runtime的初始化
  3. android采用MVP漫画APP、适配刘海屏、小黄车主界面、录音波浪动
  4. 将retrofit2和rxjava的初始化配置到application
  5. Android初始化OpenGL ES,并且分析Renderer子线程原理
  6. android studio对于错误拼写/不识别的英文单词,给予波浪提示。
  7. android初始化activity时隐藏软键盘
  8. Android——编译系统初始化设置
  9. 创建android画笔程序的样例(有镜面效果)

随机推荐

  1. Android音乐播放器系列讲解之一
  2. 我的Android相关文章目录
  3. android切换效果、Flutter信息类App、仿
  4. Android(安卓)与 Unity 交互一
  5. Java事件模型与Android事件模型的比较
  6. Android音乐播放器系列讲解之一
  7. Android(安卓)4.4 KitKat升级率已经接近1
  8. [Android(安卓)新特性] 改进明显 Android
  9. android之使用mvn构建创造项目步骤
  10. 从零开始--系统深入学习android(实践-让我