java - 如何为自定义 ImageView 的属性设置值?

标签 java android custom-view

我有一个自定义 Imageview 类,如下所示。我有一个名为 timeInterval 的字段,我在构造函数中传递它,但在 onDraw 中它的值是 0。传递它的正确方法是什么?我也不知道是否可以将它作为属性动态传递。

public class ProgressBarView extends AppCompatImageView {

    private final Handler mHandler = new Handler();
    private int mTimeInterval;
    private int mColor;
    private int[] mLocations = new int[2];

    public ProgressBarView(Context context, int timeInterval) {
        super(context);
        mTimeInterval = timeInterval;
        init(null);
    }

    public ProgressBarView(Context context, AttributeSet attrst) {
        super(context, attrst);
        init(attrst);
    }

    public ProgressBarView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(attrs);
    }

    private void init(AttributeSet attrs) {
        if (attrs == null) {
            return;
        }
        TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.ProgressBarView);
        mColor = typedArray.getColor(R.styleable.ProgressBarView_overlay_color, Color.BLACK);
    }

    public void updatePainting() {
        mHandler.postDelayed(this::invalidate, mTimeInterval / 360);
    }

    @Override
    public void onDraw(final Canvas canvas) {
        if (mTimeInterval == 0) {
            return;
        }
        Calendar now = Calendar.getInstance();
        int seconds = now.get(Calendar.SECOND);
        int mStartAngel = (int) (((float) (seconds % (mTimeInterval / 1000))
                / (mTimeInterval / 1000)) * 360);
        final Paint paint = new Paint(Paint.DITHER_FLAG);
        paint.setColor(mColor);
        paint.setStyle(Paint.Style.FILL);
        paint.setAlpha(-50);
        getLocationOnScreen(mLocations);
        int radius = getWidth() / 2;
        float centreX = this.getX() + radius;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            canvas.drawArc(centreX - radius, centreX - radius, centreX + radius, centreX + radius, 0, mStartAngel, true, paint);
        } else {
            final RectF oval = new RectF();
            oval.set(centreX - radius, centreX - radius, centreX + radius, centreX + radius);
            canvas.drawArc(oval, 0, mStartAngel, true, paint);
        }
        updatePainting();
    }
}

我像这样实例化它:

mProgressBarView = new ProgressBarView(getContext(), timeInterval);

最佳答案

你忘记了“这个”

public ProgressBarView(Context context, int timeInterval) {
    super(context);
    this.mTimeInterval = timeInterval;
    init(null);
}

关于java - 如何为自定义 ImageView 的属性设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56058179/

相关文章:

android - 从特定于 Xamarin.Forms 中的共享项目的平台中的自定义 View 呈现器获取数据

java - getClassloader 返回 null 而不是引导类加载器

Java Kafka 消费者组未能消费一些消息

java - MySql表越界异常-1

java - Android - 将对象保存在内部存储器上

java - CustomEditText 的奇怪行为

iphone - UIPickerView 在 Android 上看起来很像

java - 监听服务器发送尝试的正确方法

android - 选择文本时如何阻止 Android 滚动到 EditText 的末尾?

Android OpenCV 查找最大的正方形或矩形