自定义View,创建一个小圆点,单击可以拖动
2017-08-03 21:21
507 查看
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.xx.viewview.MainActivity"> //这里定义的是自定义的那个View继承的VIew的类 <com.xx.viewview.NewView//这里是你自定义VIew的包名+类名 android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
//自定义一个自定义View的类,继承View,在activity_main布局中应用 public class NewView extends View { //画笔 private Paint paint; //圆的半径 private float mRadius = 50f; //圆的圆心的X坐标 private float paintx = mRadius; //圆的圆心的Y坐标 private float painty = mRadius; //判断是否可以移动 true是可以移动 private boolean moveable; public NewView(Context context) { super(context); } public NewView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); //创建一个画笔 paint = new Paint(); //这是画笔的颜色 paint.setColor(Color.RED); paint.setAntiAlias(true); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //根据圆心的坐标来绘制圆心的位置,而圆心的坐标在我们触摸屏幕的时候被我们修改了 canvas.drawCircle(paintx, painty, mRadius, paint); } //要单点拖动,保证手指在圆上的时候才移动,我们需要判断触摸的位置 @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN://按下的事件 float x = event.getX();//你当前点击的位置的X轴坐标 float y = event.getY();//你当前点击的位置的Y轴的坐标 /** 在手机屏幕边缘是有一层物理边缘,所以圆心的位置减去半径,总会和屏幕边缘有一点距离 * x > paintx - mRadius 判断当前你点击的位置,是否大于 圆心的位置减去半径,如果大于则 * 证明你当前点击的位置在圆的左边缘里面,同时又不能超出圆的右边缘 * x < paintx + mRadius 就是判断你当前点的X的位置有没有超出圆的右边缘, * 如果你点击的X位置小于 圆心的位置+圆的半径,则证明没有抄错圆的右边缘 * * 同理判断Y轴 * y > painty -mRadius 判断当前你点击的位置的Y轴,大于 圆心减去半径, * 则证明你点击的位置超过了圆的上边缘,同时不能超出圆的下边缘, * 所以 判断 y < painty + mRadius 你点击的位置y轴不超过圆的下边缘,所以当前的Y轴位置 * 小于 圆心的位置加半径,则证明你点击的Y轴没有超过原的下边缘 * * 就是判断你当前的位置在没在这个圆里面,如果在这个圆里面就可以拖动,在圆的外面不能拖动 * */ if (x > paintx - mRadius && x < paintx + mRadius && y > painty - mRadius && y < painty + mRadius) { //判断你触摸的位置如果在圆里面,让moveable变成true可以拖动 moveable = true; Toast.makeText(getContext(), "我按下了", Toast.LENGTH_SHORT).show(); } else { moveable = false; } break; case MotionEvent.ACTION_MOVE://移动的事件 //如果是true的话可以移动, //重新设置一下圆心的位置,把圆心的位置(paintx,painty) //设置成我们当前触摸的位置(event.getX(),event.getY()) if (moveable) { paintx = event.getX(); painty = event.getY(); //去重新绘制一个圆,会重新走onDraw()方法 invalidate(); Toast.makeText(getContext(), "我移动了", Toast.LENGTH_SHORT).show(); } break; case MotionEvent.ACTION_UP://抬起的事件 Toast.makeText(getContext(), "我抬起来了", Toast.LENGTH_SHORT).show(); break; } return true; } }
相关文章推荐
- 自定义View,绘制一个圆形,并可以单击拖动
- 自定义view画一个圆点击可以拖动
- 创建一个简单的表视图&自定义UITableView的表单元格
- Android Training - 创建自定义的Views(Lesson 1 - 创建一个View类)
- LyricView是一个强大而灵活的自定义视图,可以在Android的音乐播放器中显示歌词
- IOS中可以一个多个xib文件对应一个类。当然也可以在一个Xib中创建多个view然后也是用一个类控制
- 【Android Training UI】创建自定义Views(Lesson 1 - 创建一个View类)
- UIActivityIndicatorView 进度条(小菊花)-> 后面也可以自定义一个进度条
- 给phpcms v9专题添加一个radio单选按钮,可以多次利用专题创建不同的栏目进行内容编辑,给专题添加一个自定义字段
- 你也可以自己写一个可爱 & 小资风格的Android加载等待自定义View
- 一个可以拖动的自定义Gridview代码
- 【Android Trainning 翻译】创建自定义View之创建一个自定义View类
- 你也可以自己写一个可爱 & 小资风格的Android加载等待自定义View - 转
- 在屏幕上创建一个docking caontainer 可以拖动docking
- 一个可以拖动的自定义Gridview代码
- ios中创建可以拖动的view原理和实现详解
- 一个可以拖动的自定义Gridview代码
- 一个可以实时显示进度的自定义view,类似于listview中音乐播放背景变化的效果
- Android--仿1号店继续拖动查看图文详情——一个自定义的ViewGroup
- 自定义View上(做一个可拖动的控件)