Android自定义view水波纹效果案例
想必做安卓的小伙伴都知道,在一个项目中或多或少的会使用到自定义view,因为原生框架始终满足不了UI-UE的需求,入不了他们的法眼。下面简单写一个自定义view。以水波纹效果为例
需求是写一个水波纹的效果,类似于pc上的点击效果。
需求分析:点击效果剖析:圆(实心、空心都可)+透明度越来越低+半径越来越大
理清需求以后就很好实现了,下面上代码:
/**
* 半径越来越大--圆环锯齿等于半径的1/3----透明度越来越低
* Created by Administrator on 2017/12/25.
*/
public class WaterView extends View{
private Paint paint;
private float x = 0;
private float y = 0;
private float radio=30;
private float stroke=20;
private int alpha=255;
public WaterView(Context context) {
super(context);
}
public WaterView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initPaint();
}
private void initPaint(){
paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.FILL);
paint.setStrokeWidth(radio/3);
paint.setAlpha(alpha);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (x==0 && y==0){
return;
}
canvas.drawCircle(x,y,radio,paint);//参数:坐标+半径
}
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
initPaint();
alpha=alpha-20;//透明度降低
radio=radio+10;//半径增大
if (alpha <= 20){
alpha=0;
paint.setAlpha(alpha);
}else {
sendEmptyMessageDelayed(0,40);
}
invalidate();//强制重绘
}
};
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
radio=30;
stroke=20;
alpha=255;
x = event.getX();
y = event.getY();
//利用handler机制,设置画笔属性,在很短的时间内重新绘制,达到波纹效果
handler.sendEmptyMessage(0);
break;
}
return true;
}
}
XML中直接引用即可
<com.example.administrator.mycustomview.MyView
android:layout_width="match_parent"
android:layout_height="match_parent" />
另外一些背景的点击效果也可以使用这种自定义,像cardview等一些做的比较好的控件都自带了点击的水波纹效果。代码逻辑很清晰。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
[雪峰磁针石博客]软件测试专家工具包3移动端
UI Automator UI Automator提供了一组API来构建基于交互UI的测试。API允许你执行操作,如打开设置菜单,非常适合黑盒自动化测试,在测试代码不依赖于应用的内部实现 uiautomatorviewer提供了一个方便的图形用户界面进行扫描和分析在Android设备上当前显示的UI组件。您可以使用此工具来检查的布局层次和查看UI组件。 UiDevice类可以访问设备并进行操作。你可以调用它的方法来访问设备属性,如当前的方向或显示尺寸。该UiDevice类也让您执行操作,例如:旋转设备;按下D-pad按钮;按Back、Home、Menu等;打开通知树栏;当前窗口截图等。 应用相关的API: UiCollection枚举容器的UI元素以计数,或通过文字(或属性等)针定位子元素; UIObject表示是在设备上可见的UI元素; UiScrollable?:为可滚动UI容器提供查找支持; UiSelector?:查询一个或者多个UI元素; Configurator: 设置参数。 示例:更改语言 #!/usr/bin/env python # -*- coding: utf-8...
-
下一篇
Android Parcelable数据序列化详解
什么是什么是Parcelable Parcelable是Android sdk提供的用实现于数据序列化的一个接口,不同于Java中的基于磁盘或者网络的Serializable,Parcelable是基于内存的,由于内存的读写速度高于磁盘,因此在Android中跨进程对象传递一般使用Parcelable。 如何使用Parcelable 要想使用Parcelable并不容易,需要编写很多代码,如下: package com.itfitness.androidparcelabletest; import android.os.Parcel; import android.os.Parcelable; public class BookBean implements Parcelable { private int bookId; private String bookName; private String bookAuthor; private String bookPrice; @Override public int describeContents() { return 0; } @...
相关文章
文章评论
共有0条评论来说两句吧...