Android点击屏幕实现圆慢慢变大然后消失---多点触摸

xiaoxiao2021-02-27  206

效果图:

实现代码:

package com.chenjun.jun_0709_pointstouch; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Handler; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import java.util.ArrayList; import java.util.List; public class MyView_tow extends View{ public MyView_tow(Context context) { super(context); } public MyView_tow(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public MyView_tow(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public MyView_tow(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //设置空心 paint.setStyle(Paint.Style.STROKE); if(circles.size()!=0){//有圆 //循环圆 for (int i=0;i<circles.size();) { //circle:0下标为圆心X坐标,1下标为圆心Y坐标,2下标为圆半径 Float[] circle=circles.get(i); if(circle[2]==500){//圆半径为500时,删除圆 circles.remove(i); }else{//否则下标移到下一个圆 i++; } //画圆 canvas.drawCircle(circle[0],circle[1],circle[2],paint); //每次半径加20 circle[2]+=20; } } } //画笔 private Paint paint=new Paint(); //辅助线程 private Handler handler=new Handler(); //圆集合 private List<Float[]> circles=new ArrayList<>(); //线程 private Runnable myRunnable=new Runnable(){ @Override public void run() { if(circles.size()>0){//有圆 //重绘 postInvalidate(); //0.1秒后再次执行该线程 handler.postDelayed(myRunnable,100); }else{ //重绘 postInvalidate(); //移除当前运行的线程 handler.removeCallbacks(myRunnable); } } }; //所有圆的初始半径 private float f=0; @Override public boolean onTouchEvent(MotionEvent event) { int action=event.getAction(); //当前手指ID int pointIndex=action>>8; //手指状态 int action_code=action & 0x000000ff; //按下时 if(action_code==0||action_code==5){ //增加一个圆 circles.add(new Float[]{event.getX(pointIndex),event.getY(pointIndex),f}); //先移除正在运行的线程 handler.removeCallbacks(myRunnable); //再重新启动线程 handler.post(myRunnable); } return true; } }

转载请注明原文地址: https://www.6miu.com/read-9644.html

最新回复(0)