Android canvas drawRect цвет всегда отображается как серый?

#android #canvas #android-canvas #android-custom-view

#Android #холст #android-холст #android-пользовательский вид

Вопрос:

Я создаю пользовательский вид на Android, но отображаемый цвет всегда серый, независимо от того, как я пытаюсь его изменить.

 private void init() {
        Resources res = mContext.getResources();
        float density = res.getDisplayMetrics().density;

        mBackgroundWidth = (int)(DEFAULT_WIDTH * density); // default to 20dp
        mPrimaryColor = gaugeColour;
        mPrimaryWidth = (int)(DEFAULT_WIDTH * density);  // default to 20dp

        x_Corner=30*density;
        y_Corner=30*density;

        mRegularTextSize = (int)(mBackgroundWidth * 0.75); //Double the size of the width;

        mRectPaintPrimary = new Paint() {
            {
                setDither(true);
                setStyle(Style.FILL);
                setStrokeCap(Cap.ROUND);
                setAntiAlias(true);
            }
        };
        mRectPaintPrimary.setColor(mPrimaryColor);

//code for text formatting followed

    }
  

И это функция onDraw

 @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);// bound our drawable Rect to stay fully within our canvas

        float left=0,top=0,right=mDrawingRect.right,bottom=mDrawingRect.bottom;

        mProgressRect=new RectF(left,top,(mProgressPercent/100)*right,bottom);

        canvas.drawRoundRect(mProgressRect, x_Corner, y_Corner, mRectPaintPrimary);

        //noinspection ResourceType
        String newColor = getResources().getString(mRectPaintPrimary.getColor());
        Log.d(TAG,"Rect colour while drawing is " newColor);

        String valueString=((int)mProgressPercent) "%";
        if(mProgressPercent<10)
            valueString="";
        canvas.drawText(valueString,mProgressRect.centerX(),mProgressRect.centerY()*1.5f,mRegularText);

    }
  

В моем журнале на самом деле говорится, что программно цвет был изменен. Итак, я получаю сообщение в строках

D / GaugeView: прямой цвет при рисовании #ffe64a19

Но то, что я вижу на дисплее Android, всегда одно и то же grey…no неважно, как я изменю цвет, чтобы быть:

введите описание изображения здесь

Ответ №1:

Кажется, я получил требуемый результат, изменив

     mRectPaintPrimary.setColor(mPrimaryColor);
  

Для

     mRectPaintPrimary.setColor(getResources().getColor(mPrimaryColor));
  

Или даже лучше

     mRectPaintPrimary.setColor(ContextCompat.getColor(mContext,mPrimaryColor));