Android: рисование основного контура круга в RelativeLayout - PullRequest
1 голос
/ 22 февраля 2011

У меня есть RelativeLayout, который я хочу содержать 4 концентрических круга (эффект радара, если хотите). Я хотел бы иметь возможность скрывать и отображать RelativeLayout, поэтому мне интересно, как именно использовать Canvas и Paint, чтобы нарисовать круг для RelativeLayout. Если бы кто-то мог объяснить жизненный цикл того, как это работает, это было бы очень полезно. Прямо сейчас у меня есть:

setContentView(R.layout.applayout);
myRelLayout = (RelativeLayout) findViewById(R.id.RLRadar);
Canvas canvas = new Canvas();
Paint circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
circlePaint.setColor(0xFF000000);
circlePaint.setStyle(Style.STROKE);
canvas.drawCircle((float) centerX, (float) centerY, (float) (maxRadius / 4), circlePaint);

Я на правильном пути? Нужно ли конвертировать холст в какой-то вид ImageView и добавить его в RelativeLayout? Или я здесь совсем не в базе?

Спасибо за любую помощь!

Редактировать: вот рабочий код.

// Add the radar to the RadarRL
Picture picture = new Picture();
Canvas canvas = picture.beginRecording(screenWidth, screenHeight);
// Draw on the canvas
Paint circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
circlePaint.setColor(0xFF000000);
circlePaint.setStyle(Style.STROKE);
circlePaint.setStrokeWidth((float) 5.0);
canvas.drawCircle((float) centerX, (float) centerY, (float) (maxRadius / 4), circlePaint);
canvas.drawCircle((float) centerX, (float) centerY, (float) ((3 * maxRadius) / 4), circlePaint);
canvas.drawCircle((float) centerX, (float) centerY, (float) (maxRadius / 2), circlePaint);
canvas.drawCircle((float) centerX, (float) centerY, (float) (maxRadius), circlePaint);      
picture.endRecording();

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

Если вы не хотите создавать пользовательский вид, вы можете использовать setBackgroundDrawable .Например, используя Picture и PictureDrawable :

// Create the picture.    
Picture picture = new Picture();
Canvas canvas = beginRecording(WIDTH, HEIGHT);
// Draw on the canvas.
picture.endRecording();

// Now set it as the background drawable.
PictureDrawable drawable = new PictureDrawable(picture);
relativeLayout = (RelativeLayout) findViewById(R.id.RLRadar);
relativeLayout.setBackgroundDrawable(drawable);
2 голосов
/ 22 февраля 2011

Необходимо создать Пользовательский вид и переопределить метод View.draw (Canvas) . Затем вы можете использовать параметр canvas, чтобы нарисовать эффект радара. Вид можно затем разместить в любом макете.

...