实现跟随手指移动的小球—跟随移动颜色变化哦!
实现的功能:
手指在屏幕上滑动,小球始终跟随手指移动。
实现的思路:
1)自定义View,在onDraw中画圆作为小球;
2)重写自定义View的onTouchEvent方法,记录触屏坐标,用新的坐标重新绘制小球;
3)在布局中引用自定义View布局,运行程序,实现跟随手指移动效果。
关键技术点:
自定义View应用、触摸事件处理、canvas绘图、Paint应用。
首先我们先自定义View类,然后继承View。
public class BallView extends View {private Paint paint; Context context; //圆的初始位置坐标 private int x=200; private int y=200; private int radius=100; //定义颜色数组 private int colorArray[] = {Color.BLACK,Color.GRAY,Color.GREEN,Color.YELLOW, Color.RED}; public BallView(Context context) { super(context); this.context=context; }public BallView(Context context, AttributeSet attrs) { super(context, attrs); this.context=context; }public BallView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context=context; }/** * onDraw方法实现绘制内容 * @param canvas */ @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //用canvas将背景设置成白色 canvas.drawColor(Color.WHITE); //设置画笔 paint=new Paint(); setPaintRandomColor(); //消除锯齿 paint.setAntiAlias(true); canvas.drawCircle(x,y,radius,paint); }//为画笔设置随机颜色 private void setPaintRandomColor(){ Random rand = new Random(); int randomIndex = rand.nextInt(colorArray.length); paint.setColor(colorArray[randomIndex]); }//实现onTouchEvent方法 @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: x=(int)event.getX(); y= (int) event.getY(); System.out.println("按下时:"+ "x坐标"+event.getRawX()+" "+"y坐标:"+event.getRawY());
break; case MotionEvent.ACTION_MOVE:x=(int)event.getX(); y= (int) event.getY(); System.out.println("移动时:"+ "x坐标"+event.getRawX()+" "+"y坐标:"+event.getRawY()); break; case MotionEvent.ACTION_UP:x=(int)event.getX(); y= (int) event.getY(); System.out.println("抬起时:"+ "x坐标"+event.getRawX()+" "+"y坐标:"+event.getRawY()); break; }//获取屏幕高度 WindowManager manager=(WindowManager)context.getSystemService(context.WINDOW_SERVICE); int width=manager.getDefaultDisplay().getWidth(); int height=manager.getDefaultDisplay().getHeight(); if (x>=18 && y>=18 && x<= width-18 && y <= height-18){ postInvalidate(); }return true; } }
在xml中把自定义View的类写一下, 在这里就不写了
在主Activity里把自定义View类给写一下
public class BallActivity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RelativeLayout container=(RelativeLayout)findViewById(R.id.activity_main); BallView ballView=new BallView(this); container.addView(ballView); } }
这样 我们的颜色变化的小球就完成了。
【实现跟随手指移动的小球—跟随移动颜色变化哦!】
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Node.js中readline模块实现终端输入
- java中如何实现重建二叉树
- 我的小叔
- 人脸识别|【人脸识别系列】| 实现自动化妆
- paddle|动手从头实现LSTM