2013-07-30 37 views
53

Tôi muốn vẽ hình tròn bằng canvas. Đây là mã của tôi:Làm cách nào để vẽ hình tròn bằng canvas trong Android?

[MyActivity.java]:

public class MyActivity extends Activity 
{ 
public void onCreate(Bundle savedInstanceState) 
    { 
     ... 
     setContentView(new View(this,w,h)); 
    } 

} 

[View.java]:

public class View extends SurfaceView 
{ 
    public View(Context context, int w, int h) 
    { 
     super(context); 
     Canvas grid = new Canvas(Bitmap.createBitmap(h,w, Bitmap.Config.ARGB_8888)); 
     grid. drawColor(Color.WHITE); 
     Paint paint = new Paint(); 
     paint.setStyle(Paint.Style.FILL); 
     grid.drawCircle(w/2, h/2 , w/2, paint); 
    } 
} 

Vì vậy, tôi có màn hình chỉ đen không tròn. Tại sao nó không hoạt động? Làm thế nào để sửa chữa nó?

Trả lời

66

Bạn có thể ghi đè phương thức onDraw của chế độ xem và vẽ vòng tròn.

protected void onDraw(Canvas canvas) { 
super.onDraw(canvas); 

canvas.drawCircle(x, y, radius, paint); 

} 

Để có tham khảo tốt hơn về việc vẽ chế độ xem tùy chỉnh, hãy xem tài liệu chính thức của Android.

http://developer.android.com/training/custom-views/custom-drawing.html

3
@Override 
public void onDraw(Canvas canvas){ 
    canvas.drawCircle(xPos, yPos,radius, paint); 
} 

Phía trên là mã để hiển thị vòng kết nối. Tinh chỉnh các thông số để suiting của bạn.

24
import android.app.Activity; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.os.Bundle; 
import android.view.View; 

public class MainActivity extends Activity 
{ 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(new MyView(this)); 
    } 

    public class MyView extends View 
    { 
     Paint paint = null; 
     public MyView(Context context) 
     { 
       super(context); 
       paint = new Paint(); 
     } 

     @Override 
     protected void onDraw(Canvas canvas) 
     { 
      super.onDraw(canvas); 
      int x = getWidth(); 
      int y = getHeight(); 
      int radius; 
      radius = 100; 
      paint.setStyle(Paint.Style.FILL); 
      paint.setColor(Color.WHITE); 
      canvas.drawPaint(paint); 
      // Use Color.parseColor to define HTML colors 
      paint.setColor(Color.parseColor("#CD5C5C")); 
      canvas.drawCircle(x/2, y/2, radius, paint); 
     } 
    } 
} 

Sửa nếu bạn muốn vẽ vòng tròn ở trung tâm. Bạn cũng có thể dịch toàn bộ vải của bạn đến trung tâm sau đó vẽ vòng tròn ở center.using

canvas.translate(getWidth()/2f,getHeight()/2f); 
canvas.drawCircle(0,0, radius, paint); 

Hai liên kết còn giúp

http://www.compiletimeerror.com/2013/09/introduction-to-2d-drawing-in-android.html#.VIg_A5SSy9o

http://android-coding.blogspot.com/2012/04/draw-circle-on-canvas-canvasdrawcirclet.html

8
public class CircleView extends View { 

    private static final String COLOR_HEX = "#E74300"; 
    private final Paint drawPaint; 
    private  float size; 

    public CircleView(final Context context, final AttributeSet attrs) { 
     super(context, attrs); 
     drawPaint = new Paint(); 
     drawPaint.setColor(Color.parseColor(COLOR_HEX)); 
     drawPaint.setAntiAlias(true); 
     setOnMeasureCallback(); 
    } 

    @Override 
    protected void onDraw(final Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawCircle(size, size, size, drawPaint); 
    } 

    private void setOnMeasureCallback() { 
     ViewTreeObserver vto = getViewTreeObserver(); 
     vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       removeOnGlobalLayoutListener(this); 
       size = getMeasuredWidth()/2; 
      } 
     }); 
    } 

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
    private void removeOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener listener) { 
     if (Build.VERSION.SDK_INT < 16) { 
      getViewTreeObserver().removeGlobalOnLayoutListener(listener); 
     } else { 
      getViewTreeObserver().removeOnGlobalLayoutListener(listener); 
     } 
    } 
} 

Xml dụ: sẽ sản xuất vòng tròn 5dp

<com.example.CircleView 
     android:layout_width="10dp" 
     android:layout_height="10dp"/> 
1

Hãy thử

enter image description here

Toàn bộ mã này cho vẽ một vòng tròn mã nguồn hoặc tải về dự án và thử nghiệm nó trên trường quay Android của bạn. Draw circle on canvas programmatically.

import android.graphics.Bitmap; 
    import android.graphics.Canvas; 
    import android.graphics.Color; 
    import android.graphics.Paint; 
    import android.graphics.Path; 
    import android.graphics.Point; 
    import android.graphics.PorterDuff; 
    import android.graphics.PorterDuffXfermode; 
    import android.graphics.Rect; 
    import android.graphics.RectF; 
    import android.widget.ImageView; 


     public class Shape { 

      private Bitmap bmp; 
      private ImageView img; 
      public Shape(Bitmap bmp, ImageView img) { 

       this.bmp=bmp; 
       this.img=img; 
       onDraw(); 
      } 

      private void onDraw(){ 
       Canvas canvas=new Canvas(); 
       if (bmp.getWidth() == 0 || bmp.getHeight() == 0) { 
        return; 
       } 

       int w = bmp.getWidth(), h = bmp.getHeight(); 

       Bitmap roundBitmap = getRoundedCroppedBitmap(bmp, w); 

       img.setImageBitmap(roundBitmap); 

      } 

      public static Bitmap getRoundedCroppedBitmap(Bitmap bitmap, int radius) { 
       Bitmap finalBitmap; 
       if (bitmap.getWidth() != radius || bitmap.getHeight() != radius) 
        finalBitmap = Bitmap.createScaledBitmap(bitmap, radius, radius, 
          false); 
       else 
        finalBitmap = bitmap; 
       Bitmap output = Bitmap.createBitmap(finalBitmap.getWidth(), 
         finalBitmap.getHeight(), Bitmap.Config.ARGB_8888); 
       Canvas canvas = new Canvas(output); 

       final Paint paint = new Paint(); 
       final Rect rect = new Rect(0, 0, finalBitmap.getWidth(), 
         finalBitmap.getHeight()); 

       paint.setAntiAlias(true); 
       paint.setFilterBitmap(true); 
       paint.setDither(true); 
       canvas.drawARGB(0, 0, 0, 0); 
       paint.setColor(Color.parseColor("#BAB399")); 
       canvas.drawCircle(finalBitmap.getWidth()/2 + 0.7f, finalBitmap.getHeight()/2 + 0.7f, finalBitmap.getWidth()/2 + 0.1f, paint); 
       paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
       canvas.drawBitmap(finalBitmap, rect, rect, paint); 

       return output; 
      } 
Các vấn đề liên quan