Intereting Posts
OnLoadFinished () вызывается дважды Как ограничено количество просмотров? Почему API Android запрашивает параметр результатов, а не метод возврата? Невозможно скомпилировать, Невозможно выполнить dex, не может объединиться, не-jumbo инструкция В чем разница между состоянием сети доступа (ACCESS_NETWORK_STATE) и правами доступа WIFI (ACCESS_WIFI_STATE)? Android Как я могу позвонить вместе с камерой или галереей? Вставить новое намерение контакта Установите RelativeLayout для заполнения неиспользуемого пространства Использовать «onclick» в свойствах в макете для диалогов android Не удается вызвать метод notifyItemInserted в обратном вызове scroll recyclerview-v7: 24.2.0 SetImeOptions: почему кнопка «Готово» не отображается на мягкой клавиатуре? Удалите изображение из приложения для просмотра изображений Android Xamarin C # – Android – запрет закрытия AlertDialog на клике PositiveButton Google Map v2 Маркерная анимация Меню параметров, не отображаемое в ICS с использованием библиотеки совместимости

Как нарисовать круг на холсте в 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); } } 

Так что у меня только черный экран без круга. Почему это не работает? Как это исправить?

Solutions Collecting From Web of "Как нарисовать круг на холсте в Android?"

Вы можете переопределить метод onDraw своего вида и нарисовать круг.

 protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawCircle(x, y, radius, paint); } 

Для лучшей справки о создании пользовательских представлений ознакомьтесь с официальной документацией на Android.

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

 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); } } } 

Измените, если вы хотите нарисовать круг в центре. Вы также можете перевести весь свой холст в центр, затем нарисуйте круг в центре.

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

Эти две ссылки также помогают

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

 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: создаст круг из 5dp

  <com.example.CircleView android:layout_width="10dp" android:layout_height="10dp"/> 
 @Override public void onDraw(Canvas canvas){ canvas.drawCircle(xPos, yPos,radius, paint); } 

Выше приведен код для создания круга. Подстройте параметры в соответствии с вашими требованиями.

Попробуй это

Введите описание изображения здесь

Весь код для рисования круга или загрузки исходного кода проекта и проверки его на вашей студии Android. Нарисуйте круг на холсте программно.

 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; }