安卓图形用户界面 : trying to draw on a canvas

标签 android view

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/

相关文章:

android - gradle-android中的apk范围有什么用?

java - 以编程方式发现本地网络设备和 IO

android - anko DSL 中的 <fragment> 标签等价物

php - 如何向现有的 joomla 2.5 组件添加新 View (以及新的菜单项类型)?

iphone - 使用设备方向来实现模态视图 Controller

mobile - Flutter 中的上滑 View

java - 何时调用 View.onMeasure()?

android - 我想在 UI 线程上运行 AsyncTask - 我该怎么做?

java - 如何更改共享首选项中的值

swift - 在 SwiftUI 中使用 google 帐户登录后是否可以更改您的 View ?