#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));