80,351
社区成员
发帖
与我相关
我的任务
分享
public class WaterView extends View{
private static final String TAG = "WATER VIEW";
private static final int MAX_APHLA = 255;
private int alpha;
private int radius;
private int xDown;
private int yDown;
private Paint paint; //画笔
private float width;
//AttributeSet一些列属性的集合接口 xml里面的尺寸属性
public WaterView(Context context,AttributeSet attrs) {
super(context,attrs);
// TODO Auto-generated constructor stub
Log.i(TAG, "MainActivity");
alpha = 0;
radius = 0;
initPaint();
}
private void initPaint(){
Log.i(TAG, "initPaint");
paint = new Paint();
paint.setAntiAlias(true); //设置标志位ANTI_ALIAS_FLAG false为清除该标志位,该标志位的作用平滑边缘,防止锯齿状边缘
paint.setStrokeWidth(width); //设置画笔的宽度,0表示画笔为一个像素点款
paint.setStyle(Paint.Style.STROKE); //设置环形方式绘制
paint.setAlpha(alpha);
Log.i(TAG, "alpha is: "+ paint.getAlpha());
paint.setColor(Color.RED);
}
//自定义控件需要指定它的大小
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Log.i(TAG, "onMeasure");
}
//draw方法,画出我们需要的效果
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
Log.i(TAG, "onDraw");
canvas.drawCircle(xDown, yDown, radius, paint);
}
//touch点击事件
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.i(TAG, "onTouchEvent");
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
radius = 0;
alpha = MAX_APHLA;
width = radius / 4;
xDown = (int)event.getX();
yDown = (int)event.getY();
myHander.sendEmptyMessage(0);
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return true;
}
private Handler myHander = new Handler(){
@Override
public void handleMessage(Message msg) {
Log.i(TAG, "handleMessage");
// TODO Auto-generated method stub
switch(msg.what){
case 0:
flushState();
invalidate(); //系统方法 调用ondraw
if(alpha > 0){
myHander.sendEmptyMessageAtTime(0, 100);
}
break;
default:
break;
}
}
};
//刷新圆圈的画笔尺寸
private void flushState(){
radius += 5;
alpha -= 10;
if(alpha <= 0){
alpha = 0;
}
width = radius / 4;
paint.setAlpha(alpha);
paint.setStrokeWidth(width);
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/l1"
android:orientation="vertical" >
<com.jack.waterview.WaterView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/test"/>
</LinearLayout>