Как написать текст в 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 проще реализовать, но он будет иметь дополнительный рендеринг. поэтому сначала рассмотрите другой вариант.