创建 CircleView类继承View

package com.gss.jrtt.mycircleview;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.Toast;/** * Created by lenovo on 2017/9/15. */public class CircleView extends View {    //画笔    private Paint mPaint;    //圆的半径    private float mRadius = 50f;    //圆的圆心的x坐标    private float pointX = mRadius;    //圆的圆心的Y坐标    private float pointY = mRadius;    //控制是否可以移动的变量 true的时候可以移动    private boolean moveable;    public CircleView(Context context) {        super(context, null);    }    //自定义veiw在布局中使用,必须实现的一个构造器    public CircleView(Context context, @Nullable AttributeSet attrs ) {        super(context, attrs );        //构造一个paint        mPaint = new Paint();        mPaint.setColor(Color.RED);        mPaint.setAntiAlias(true);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        //根据圆心的坐标来绘制圆的位置的,而圆心的坐标,我们触摸屏幕的时候被我们修改了        canvas.drawCircle(pointX,pointY,mRadius,mPaint);    }    //要单点拖动,保证手指在圆上的时候才移动,我们需要判断触摸的位置    @Override    public boolean onTouchEvent(MotionEvent event) {        //手指触摸的x坐标        float touchX;        //手指触摸的y坐标        float touchY;        //event.getAction()判断事件的类型        switch (event.getAction()) {            //按下的事件            case MotionEvent.ACTION_DOWN:                touchX = event.getX();                touchY = event.getY();                if (touchX > pointX - mRadius && touchX < pointX + mRadius && touchY > pointY - mRadius && touchY < pointY + mRadius) {                    moveable = true;                    Toast.makeText(getContext(), "我按下了", Toast.LENGTH_LONG).show();                } else {                    moveable = false;                }                break;            //移动的事件            case MotionEvent.ACTION_MOVE:                if (moveable) {                    //重新设置一下圆心的位置, 把我们圆心的位置(pointX,pointY)设置成                    // 当前触摸的位置(event.getX()event.getY()                    pointX = event.getX();                    pointY = event.getY();                    //去重新绘制, 会重新走onDraw()方法                    invalidate();                }                break;            //抬起的事件            case MotionEvent.ACTION_UP:                break;        }        return true;    }}最后直接在activity_main.xml实现布局就可以了
<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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.gss.jrtt.mycircleview.MainActivity">//你的包名加上继承View的类名    <com.gss.jrtt.mycircleview.CircleView        android:id="@+id/circle"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_centerHorizontal="true"        >    com.gss.jrtt.mycircleview.CircleView>RelativeLayout>运行起来看下图,可以随着手指移动

更多相关文章

  1. android 多点触摸实例
  2. Android实现拖拽GridView到目标View
  3. TimePicker组件&DatePicker组件
  4. Android(安卓)自定义控件 按钮滚动选择
  5. Android(安卓)获取View的位置参数:x,y和相对父容器的偏移量以及中
  6. [置顶] android滑动基础篇
  7. 第五章 Android(安卓)Scroll 分析
  8. Android(安卓)O: 触摸事件传递流程源码分析(上)
  9. 毫无保留开源我写的:IOS Android(安卓)Ipad 多点触摸通用js 库

随机推荐

  1. Android用户界面优化-Android(安卓)Slidi
  2. Android(安卓)存储路径选择方法
  3. Android(安卓)五种布局模式
  4. android 截屏的三种方法
  5. Android(安卓)USB Host与HID通讯(二)
  6. Unable to get buffer of resource asset
  7. android中handler 轮询数据变化 使用Weak
  8. 在AMD64 位ubuntu8上android source code
  9. apt-get -f install 修复失败!
  10. Android(安卓)如何解析Xml字符串