2013-07-23 35 views
10

Xin chào, tôi đã cố gắng viết Số trên Hình ảnh. Hình ảnh cho N số câu hỏi. Nếu người dùng nhập câu trả lời là chính xác, sau đó nó sẽ được hiển thị với số câu hỏi với hình ảnh đánh dấu đánh dấu số câu hỏi khác với hình ảnh đánh dấu sai. Tôi cần phải viết số câu hỏi trên hình ảnh. Mã của tôi là ở đây:Làm thế nào để viết văn bản trên ImageView trong mã hóa Android?

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]); 
       }  
      } 

tôi nhận được cảnh báo này:

The constructor BitmapDrawable(Bitmap) is deprecated 

Hình ảnh không hiển thị tại thời gian chạy. Tôi đang làm gì sai?

Trả lời

14

Tôi tin rằng cách giải quyết đơn giản nhất mà không cần bất cứ điều gì trọng là nên có một TextView và thiết lập nền tảng của nó với một nguồn lực drawable.

Ví dụ:

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"); 
+0

Hey cảm ơn bạn vì ý tưởng ur. Nó hoạt động !!! Nhưng tôi muốn văn bản ở một vị trí cụ thể của hình ảnh. Làm thế nào để làm điều đó? –

+0

@VigneshBala Tôi nghĩ rằng sẽ rất khó nếu có thể tham khảo các phần cụ thể của bản vẽ. Tất nhiên, bạn có thể di chuyển văn bản xung quanh với thuộc tính 'gravity' ... – Mena

+0

Cảm ơn bạn thân nó đã làm việc !!! Bạn thật tuyệt vời ... Cuối cùng tôi có được những gì tôi muốn –

2

không thể viết văn bản trên imageview, nhưng bạn có thể extend để làm như vậy. Ngoài ra,

  1. bạn có thể thêm một yếu tố chồng chéo các ImageView trong layout, và làm cho nó có thể nhìn thấy chỉ khi tình trạng của bạn trở nên hiện thực.

  2. hay, bạn có thể sử dụng textView để hiển thị hình ảnh, như một nền tảng hoặc như một drawable sang trái/phải ..

Ps: Tuy nhiên, tùy chọn 1 là dễ dàng hơn để thực hiện, nhưng nó sẽ có hiển thị bổ sung. vì vậy hãy cân nhắc tùy chọn khác trước.

+0

Bạn có thể phân lớp ImageView, ghi đè lênDraw và gọi canvas.drawText sau super.onDraw. Vì vậy, thực sự nó có thể viết văn bản trên một ImageView. – npace

+0

@ không gian ... tôi đã không xem xét điều đó, vì tôi đã đề xuất các cách khác dễ dàng hơn một chút. – Ankit

+0

Đủ công bằng.Đề xuất thứ hai của bạn nên tốt như vậy, nhưng lời đề nghị đầu tiên sẽ thực hiện một cuộc gọi vẽ dự phòng, mặc dù đó là cách dễ nhất để thực hiện việc này. – npace

4

Từ Android documentation:

BitmapDrawable (Bitmap bitmap) constructor này đã bị phản đối ở mức API 4. Sử dụng BitmapDrawable (Tài nguyên, Bitmap) để đảm bảo rằng drawable đã thiết lập đúng mật độ mục tiêu của nó.

Bạn cũng có thể tạo chế độ xem của riêng mình (xem Android: Creating Custom Views tutorial để biết ví dụ) và đặt bạn hình ảnh và văn bản trong chế độ xem này.

3

1). Hãy bố trí của riêng bạn nói Image_TextView.xml như thế này:

<?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> 

này sẽ làm cho hình ảnh với các dòng chữ trên nó.

2). Sau đó, sử dụng bố cục inflator để tăng lượt xem này trong chế độ xem gốc của bạn.

Lưu ý: Sử dụng bố cục inflator, bạn có thể thêm chế độ xem khác vào chế độ xem gốc của bạn.