2013-09-08 3 views
0

Я рисую текст поверх фонового изображения на холсте. Я перемещаю изображение в интерактивном режиме (например, указатель платы Ouija). Я установил черное полотно, указатель красный, и я хочу написать над ним белый текст, чтобы указатель имел на нем имя игрока.Окрас текста над фоном изображение тусклый

В Android 2.3.4 он выглядит как сплошной белый текст поверх красного указателя, который довольно ясен, но я бы хотел использовать любой цвет. В Android 4.1.2 я едва вижу белый текст. Вот мой код:

public Pointer(Context context) { 
    super(context); 

    paintBg = new Paint(); 
    paintBg.setColor(Color.BLACK); 
    paintName = new Paint(); 
    paintName.setColor(Color.WHITE); 
    paintName.setTextSize(50); // set text size 
    paintName.setStrokeWidth(5); 
    paintName.setTextAlign(Paint.Align.CENTER); 

    this.setImageResource(res); // pointer.png in res/drawable folder 
    Drawable d = getResources().getDrawable(res); 
    h = d.getIntrinsicHeight(); 
    w = d.getIntrinsicWidth(); 

    canvas = new Canvas(); 
    canvas.drawPaint(paintBg);//make background black 

    // float imageScale = width/w; // how image size scales with screen 
} 


@Override 
public void onDraw(Canvas canvas) { 

    y = this.getHeight()/2; // center of screen 
    x = this.getWidth()/2; 
    int left = Math.round(x - 0.8f * w); 
    int right = Math.round(x + 0.8f * w); 

    canvas.save(); 
    canvas.rotate((direction + 180) % 360, x, y); // rotate to normal 
    canvas.drawText(s, x, y + 20, paintName); // draw name 

    canvas.restore(); 
    canvas.rotate(direction, x, y); // rotate back 
    super.onDraw(canvas); 
} 

Что изменилось в 4.1.2, что повлияет на это, или я что-то неправильно нанесу? Спасибо за вашу помощь в этом, потому что это сводит меня с ума.

Редактировать включить снимки экрана:

Android 2.3.4
2.3.4 Image

Android 4.1.2 4.1.2 Image

Обратите внимание, как белый текст появляется, чтобы быть на вершине в 2.3.4 время он появляется ниже или мутный в 4.1.2.

Как free3dom указывает, что это связано с альфой. Я изменяю альфа, потому что, если я этого не делаю, текст не отображается поверх стрелки. Похоже, что ImageView с изображением указателя всегда на высоте - может ли это быть тем, что происходит? Вот как я ручка настройки альфа:

public static void setAlpha(View view, float alpha, int duration) { 
if (Build.VERSION.SDK_INT < 11) { 
    final AlphaAnimation animation = new AlphaAnimation(alpha, alpha); 
    animation.setDuration(duration); 
    animation.setFillAfter(true); 
    view.startAnimation(animation); 
} else       //for 11 and above 
    view.setAlpha(alpha); 
} 

Может быть, это что-то делать с помощью this.setImageResource (Рез), чтобы установить ресурс изображения? Согласно руководству разработчика Android, я могу установить только альфа для одного представления, и все в представлении изменилось. Однако, если я опускаю альфу, изображение стрелки кажется достаточно прозрачным, чтобы я мог видеть текст.

+0

на основе новой информации, кажется, что ваш заказ делают это проблема. Есть ли способ показать стрелку ** перед ** вы визуализируете текст? – free3dom

+0

Стрелка создается как часть создания класса изображения. Все текстовые записи выполняются после этого во время метода onDraw этого класса. Я просмотрел документы разработчика, но не могу понять, как управлять порядком визуализации. Очень расстраивает ... – bob

+0

Вы пытались переместить 'super.onDraw (canvas);' в начало вашего метода 'onDraw'? – free3dom

ответ

0

Вы устанавливаете ширину хода, но никогда не указываете, что для Paint следует использовать удар.

Попробуйте добавить

paintName.setStyle(FILL_AND_STROKE);

+0

Спасибо free3dom. Это улучшает текст в 2.3.4, но не влияет на то, чтобы он выглядел более четко поверх указателя фона в 4.1.2.Должно быть что-то, что я делаю неправильно для 4.1.2. – bob

+0

Попробуйте использовать [setSubpixelText()] (http://developer.android.com/reference/android/graphics/Paint.html#setSubpixelText%28boolean%29), чтобы узнать, не влияет ли это на 4.1.2. Кроме того, скриншот проблемы в 4.1.2 был бы полезен для выявления проблемы. – free3dom

+0

Я попытался опубликовать скриншоты, но у меня недостаточно очков репутации :( Настройка setSubpixelText (isEnabled) не имеет значения. – bob