Как написать текст в ImageView в кодировке Android?
Привет, я пытаюсь написать Numbers в Imageview. Изображения для N числа вопросов. Если пользователь вводит ответ правильно, тогда он должен быть отображен с номером вопроса с тиком отметки image else номер вопроса с неправильным изображением метки. Мне нужно написать номер вопроса на изображении. Мой код здесь:
LinearLayout l_layout = (LinearLayout) findViewById(R.id.linear_view_report);
LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1.0f);
ImageView[] imgview=new ImageView[questions.length];
for(int i=0;i<no_of_questions;i++)
{
if(userEnteredAnswers[i]==correct_answer[i]){
Bitmap bm=BitmapFactory.decodeResource(getResources(),R.drawable.correct);
Canvas canvas = new Canvas(bm);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setTextSize(10);
canvas.drawText(i, 5, 5, paint);
imgview[i]=new ImageView(this);
imgview[i].setImageDrawable(new BitmapDrawable(bm));
l_layout.addView(imgview[i]);
}
else {
Bitmap bm=BitmapFactory.decodeResource(getResources(),R.drawable.wrong);
Canvas canvas = new Canvas(bm);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setTextSize(10);
canvas.drawText(i, 5, 5, paint);
imgview[i]=new ImageView(this);
imgview[i].setImageDrawable(new BitmapDrawable(bm));
l_layout.addView(imgview[i]);
}
}
Я получаю это предупреждение:
The constructor BitmapDrawable(Bitmap) is deprecated
Изображение не отображается во время выполнения.
Что я делаю неправильно?
Ответы
Ответ 1
Я считаю, что самым простым обходным решением без переопределения было бы наличие TextView
и установка его фона ресурсом drawable
.
Например:
TextView t = (TextView)findViewById(R.id.my_text_view);
// setting gravity to "center"
t.setGravity(Gravity.CENTER);
t.setBackgroundResource(R.drawable.my_drawable);
t.setText("FOO");
Ответ 2
Из Документация для Android:
BitmapDrawable (растровое изображение растрового изображения) Этот конструктор устарел на уровне API 4. Используйте BitmapDrawable (ресурсы, битмап), чтобы гарантировать, что drawable правильно установил свою целевую плотность.
Вы также можете создать свой собственный вид (см. Android: создание учебника для пользовательских просмотров для примера) и поместите изображение и текст в этот вид.
Ответ 3
1). Сделайте свой собственный макет. Скажите Image_TextView.xml следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="150dp"
android:layout_height="150dp"
android:gravity="center" >
<ImageView
android:id="@+id/imgview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:cropToPadding="true"
android:scaleType="center"
android:src="@drawable/box" />
<RelativeLayout
android:layout_width="150dp"
android:layout_height="35dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginBottom="0dp"
android:background="#80666666" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="Hello"
android:textColor="#FFFFFF"
android:textStyle="bold"/>
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
Это сделает изображение с текстом над ним.
2). Затем используйте макетный инфлятор, чтобы раздуть это представление в родительском представлении.
Примечание: Используя макетный инфлятор, вы можете добавить другое представление в родительский вид.
Ответ 4
невозможно записать текст на imageview
, но вы можете extend
сделать это. Альтернативно,
-
вы можете добавить элемент, перекрывающий imageview
в layout
, и сделать его видимым только тогда, когда ваше условие станет истинным.
-
или вы можете использовать textView
для отображения изображения в качестве фона или как рисованного влево/вправо.
Ps:, однако вариант 1 проще реализовать, но он будет иметь дополнительный рендеринг. поэтому сначала рассмотрите другой вариант.