android - 自定义 View 不绘制自己

标签 android android-layout android-custom-view

我在这里阅读了关于这个主题的不同问题,但我仍然找不到答案。出于任何原因,请随时关闭此问题。

我有一个简单的 Circle扩展 View 的类.

这个类的代码是:

public class ProgressCircle extends View {
    Paint mCirclePaint;
    float extRadius;
    float viewWidth, viewHeight;
    float centerX, centerY;

    public ProgressCircle(Context context, AttributeSet attrs) {
        super(context, attrs);
        setWillNotDraw(false);
        init();
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        float xpad = (float) getPaddingLeft() + getPaddingRight();
        float ypad = (float) getPaddingTop() + getPaddingBottom();
        float ww = (float)w - xpad; float hh = (float)h - ypad;
        extRadius = Math.min(ww, hh) / 2;

        viewWidth = this.getWidth();
        viewHeight = this.getHeight();
        centerX = viewWidth / 2; centerY = viewHeight / 2;

        super.onSizeChanged(w, h, oldw, oldh);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(centerX, centerY, extRadius, mCirclePaint);
        canvas.drawText("ciao", 0, 0, mCirclePaint);    
    }

    private void init() {
        mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mCirclePaint.setColor(0x666666);
        mCirclePaint.setStyle(Paint.Style.FILL_AND_STROKE);
    }

我确认在创建主 Activity 时调用了这个类中的每个方法(通过使用一些 Log.d() s)。我添加了一个 <com.mypackage.Circle>我主要 Activity 中的元素 LinearLayout然后我添加了一个示例测试按钮。

我实现的是在我的 Circle 时显示按钮不是,但按钮(在 LinearLayout 中位于 Circle 之后)仍然不是布局的第一个元素:这让我觉得确实发生了一些事情,但没有绘制任何东西。

最佳答案

这只是一个愚蠢的问题:mCirclePaint.setColor(0x666666) 中的颜色无效。它适用于 mCirclePaint.setColor(Color.RED)res 文件夹中定义的任何其他颜色。

如果您需要指定颜色值,则必须包含透明度字节(否则它不是您指定的 32 位整数,而是 24 位整数)。所以 0x666666 是无效的,但是 0xff666666 是一个有效的颜色并且会绘制。

关于android - 自定义 View 不绘制自己,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15025643/

相关文章:

android - 项目构建失败 : Task 'compileDebug' is ambiguous in root project

安卓网络地址

android - 通过触摸屏跳过绘画(不连续的线条)

android - 在 android 中显示来自 sqlite 的新更新项目的问题

java - ActionBar 的选项卡标题中的自定义字体

android - 显示 fragment 的 Activity 按钮

java - Android 错误锁定模式监听器

带有 .gif 文件的 Android 自定义进度条

android - 在 Kotlin 的自定义 View 中访问属性

java - 自定义 View 的 getWidth() 和 getHeight() 给出了错误的值