Ответ 1
Попробуйте paint.setStyle(Paint.Style.STROKE)
?
как рисовать пустой прямоугольник с и т.д. borderWidth = 3 и borderColor = черный, а часть внутри прямоугольника не имеет содержимого или цвета. Какую функцию в Canvas использовать
void drawRect(float left, float top, float right, float bottom, Paint paint)
void drawRect(RectF rect, Paint paint)
void drawRect(Rect r, Paint paint)
Спасибо.
Я пробую этот пример
Paint myPaint = new Paint();
myPaint.setColor(Color.rgb(0, 0, 0));
myPaint.setStrokeWidth(10);
c.drawRect(100, 100, 200, 200, myPaint);
Он рисует прямоугольник и заполняет его черным цветом, но я хочу просто "рамку" вокруг как это изображение:
Попробуйте paint.setStyle(Paint.Style.STROKE)
?
Предполагая, что "часть внутри прямоугольника не имеет цвета содержимого" означает, что вы хотите различать заливки внутри прямоугольника; вам нужно нарисовать прямоугольник внутри вашего прямоугольника, затем с шириной хода 0 и желаемым цветом заливки.
Например:
DrawView.java
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
public class DrawView extends View {
Paint paint = new Paint();
public DrawView(Context context) {
super(context);
}
@Override
public void onDraw(Canvas canvas) {
paint.setColor(Color.BLACK);
paint.setStrokeWidth(3);
canvas.drawRect(30, 30, 80, 80, paint);
paint.setStrokeWidth(0);
paint.setColor(Color.CYAN);
canvas.drawRect(33, 60, 77, 77, paint );
paint.setColor(Color.YELLOW);
canvas.drawRect(33, 33, 77, 60, paint );
}
}
Действия для запуска:
StartDraw.java
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
public class StartDraw extends Activity {
DrawView drawView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
drawView = new DrawView(this);
drawView.setBackgroundColor(Color.WHITE);
setContentView(drawView);
}
}
... получится следующим образом:
//white background
canvas.drawRGB(255, 255, 255);
//border properties
paint.setColor(Color.BLACK);
paint.setStrokeWidth(0);
paint.setStyle(Paint.Style.STROKE);
canvas.drawRect(100, 100, 200, 200, paint);
paint.setStrokeWidth(3);
paint.setColor(BLACK);
и любой из ваших drawRect
должен работать.
Создайте новый класс MyView, Which extends View
. Переопределите метод onDraw(Canvas canvas)
для рисования прямоугольника на Canvas
.
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;
public class MyView extends View {
Paint paint;
Path path;
public MyView(Context context) {
super(context);
init();
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init(){
paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStrokeWidth(10);
paint.setStyle(Paint.Style.STROKE);
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
canvas.drawRect(30, 50, 200, 350, paint);
canvas.drawRect(100, 100, 300, 400, paint);
//drawRect(left, top, right, bottom, paint)
}
}
Затем переместите свою активность Java на setContentView()
, используя наш пользовательский вид MyView.Call таким образом.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyView(this));
}
Более подробную информацию вы можете найти здесь
http://developer.android.com/reference/android/graphics/Canvas.html
Не знаю, слишком ли поздно, но так, как я решил это, было нарисовать четыре тонких прямоугольника, которые вместе составляли одну большую границу. Рисование границы с помощью одного прямоугольника кажется недействительным, поскольку все они непрозрачны, поэтому вы должны рисовать каждый край границы отдельно.