您的位置:首页 > 其它

自定义view画圆,并且圆可以随意拖动

2017-06-07 15:17 387 查看
   主要分为两大步

  首先 自己写一个类继承view:类里面写逻辑代码,重写三个参数,实例化一个画笔,重写ondrow();方法 ,重写onTouchevent()方法

  第二步在布局中引用

    以下是自己写的自定义view类     需要可以直接拷贝自己的工程中  然后在布局文件中引用即可

  

     

package view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

/**
* Created by 1 on 2017/6/7.
*/

public class MyView_Hy extends View {

private Paint mPaint;
//设置起始位置
private float x=100;
private float y=100;
//实例化一个rect类
// Rect类主要用于表示坐标系中的一块矩形区域,
// 并可以对其做一些简单操作。
// 这块矩形区域,需要用左上右下两个坐标点表示(left,top,right,bottom
Rect rect = new Rect();

public MyView_Hy(Context context) {
super(context);
}

public MyView_Hy(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint();//创建画笔
mPaint.setColor(Color.BLUE);//设置画笔颜色
mPaint.setAlpha(255);// 透明度

//mPaint.setStyle(mPaint.Style.STROKE);// //设置画笔为空心
mPaint.setStrokeWidth(2);// 画笔线宽
mPaint.setAntiAlias(true);//设置抗锯齿
}

public MyView_Hy(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);

}
//重写
a556
Ondrow();方法

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//调用画布canvas里面的画圆方法,并设置里面的参数坐标x y,半径,画笔
canvas.drawCircle(x,y,100,mPaint);
canvas.drawText("球球",100,200,mPaint);

rect.set((int)(x-100),(int)(y-100),(int)(x+100),(int)(y+100));
}
//重写 onTouchEvent 方法
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:

break;
case MotionEvent.ACTION_MOVE:
float x1 = event.getX();
float y1 = event.getY();
if(x1>rect.left && x1<rect.right && y1>rect.top && y1<rect.bottom){
//得到当前坐标 用event得到
this.x =event.getX();
this.y = event.getY();
//刷新当前视图
invalidate();//这个方法是主线程中刷新,
// postInvalidate();//这个方法是子线程中刷新
}

break;
case MotionEvent.ACTION_UP:

break;
}
//记住最后要返回TRUE
return true;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: