当前位置: 代码迷 >> Android >> 从圈子android开始绘画
  详细解决方案

从圈子android开始绘画

热度:20   发布时间:2023-08-04 11:45:28.0

我可以编写一个绘图应用程序,但是有一个问题

我想从圆开始绘制,我的起点永远是圆,我该怎么做?

现在我可以从任何点进行绘制,我试图找到屏幕的中间,但是它没有用

    public CanvasView(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.context = context;
    path = new Path();
    paint = new Paint();
    paint.setColor(Color.RED);
    paint.setAntiAlias(true);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeJoin(Paint.Join.ROUND);
    paint.setStrokeWidth(20f);
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    mbitmap = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);
    mcanvas = new Canvas(mbitmap);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
    int a = metrics.widthPixels; // to get width of the screen
    int b = metrics.heightPixels;

    canvas.drawCircle(a/2,((b/2)-160),50, paint);
    if ((canDraw)) {
        canvas.drawPath(path, paint);
    }
}

private void startTouch (float x , float y){
    if ((canDraw)) {
    path.moveTo(x,y);
    mX = x;
    mY = y ;
}}
public void moveTouche (float x,float y ) {
    if ((canDraw)) {
    float dx = Math.abs(x - mX);
    float dy = Math.abs(y - mY);
    if(dx >= Tolerance || dy >= Tolerance){
        path.quadTo(mX,mY,(x+mX)/2,(y+mY)/2);
        mX = x ;
        mY = y;

    }}
}
private void upTouch(){
    if ((canDraw)) {
    path.lineTo(mX,mY);
}}

@Override
public boolean onTouchEvent(MotionEvent event) {
    float x = event.getX();
    float y = event.getY();
   switch (event.getAction()){
        case MotionEvent.ACTION_DOWN:
            startTouch(x,y);
            invalidate();
            break ;
        case MotionEvent.ACTION_UP:
            upTouch();
            invalidate();
            break ;
        case MotionEvent.ACTION_MOVE:
            moveTouche(x,y);
            invalidate();
            break;
    }
   return true ;
}
}    
  • 查找划定必须从其开始触摸的中心区域的坐标,或创建一个标识它的元素
  • ouTouchEvent内部,编写以下代码:

     case MotionEvent.ACTION_DOWN: if (touchIsInsideCircle(x,y)) { startTouch(x,y); invalidate(); } break ; 
  • 使用预定义的坐标定义一个知道屏幕中心的函数:

      boolean touchIsInsideCircle(float x, float y) { return (x < maxX && x > minX && y < maxY && y > minY); } 
  相关解决方案