public class Player extends ViewGroup {
private RectF rect = new RectF();
private Paint paint;
public Player(Context context,String pname) {
super(context);
setWillNotDraw(false);
paint=new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStyle(Style.FILL);
paint.setColor(getResources().getColor(R.color.red));
}
public void onDraw(Canvas canvas) {
canvas.drawRoundRect(rect, 10, 10, paint);
canvas.drawCircle(rect.centerX(), rect.centerY(), 10, paint);
//canvas.drawColor(Color.RED);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int wspec = MeasureSpec.makeMeasureSpec(
getMeasuredWidth(), MeasureSpec.EXACTLY);
int hspec = MeasureSpec.makeMeasureSpec(
getMeasuredHeight(), MeasureSpec.EXACTLY);
for(int i=0; i<getChildCount(); i++){
View v = getChildAt(i);
v.measure(wspec, hspec);
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
rect.set(l, t,r, b);
}
}
第三个命令确实绘制了一个红色矩形,其边界是由参数 rect 给出的 rect (l,t,r,b) = (412,415,735,754),并且由于某种原因,前两个命令不执行任何操作 Canvas 上的效果!
我已经确保该矩形是一个实际的矩形,正如我提到的,它的值是 (412,415,735,754),这确实构成了一个有效的矩形,并且您看到了我如何定义绘画,那么为什么它不绘制呢?
我花了 2 个小时试图弄清楚,说真的......
谢谢!
顺便说一句,该类扩展了 ViewGroup 因为它最终意味着实现一个 View 容器..
最佳答案
在你的 onLayout 例程中尝试一下这个:
protected void onLayout(boolean changed, int l, int t, int r, int b) {
rect.set(0, 0, r-l, b-t);
}
这样,您将创建一个具有完整布局的宽度和高度的矩形,但其左上角点(相对于 Canvas )为 0, 0。
关于安卓图形用户界面 : trying to draw on a canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13075435/