Как установить значение для свойства пользовательского изображения? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть собственный класс 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);

1 Ответ

0 голосов
/ 09 мая 2019

Вы забыли про "это"

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