छवि पर Android पाठ


96

मेरे पास एक छवि के साथ एक छवि दृश्य है, उस छवि पर मैं एक पाठ रखना चाहता हूं। मैं उसे कैसे प्राप्त कर सकता हूं?


1
सरल तरीका यह है कि आप TextView को ले लें और जैसा कि आप ImageView में करते हैं, पृष्ठभूमि निर्धारित करें। यह आपका काम आसान कर देगा ..
AndroidGeek

बस नीचे दिए गए लिंक को देखें। मुझे उम्मीद है कि यह यू की मदद करेगा ... stackoverflow.com/questions/11100428/…
गणेश कटिकर

जवाबों:


163

यह है कि मैंने इसे कैसे किया और यह ठीक उसी तरह से काम किया जैसा आपने एक RelativeLayout के अंदर पूछा था:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativelayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ImageView
        android:id="@+id/myImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/myImageSouce" />

    <TextView
        android:id="@+id/myImageViewText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@id/myImageView"
        android:layout_alignTop="@id/myImageView"
        android:layout_alignRight="@id/myImageView"
        android:layout_alignBottom="@id/myImageView"
        android:layout_margin="1dp"
        android:gravity="center"
        android:text="Hello"
        android:textColor="#000000" />

</RelativeLayout>

इस उदाहरण के लिए एक टन धन्यवाद। मैंने कंपाउंडड्राएबल टेक्स्टव्यू का उपयोग करने की कोशिश की, लेकिन मैं एक छवि यूआरएल सेट करने में सक्षम नहीं हूं। लेकिन इस वर्कअराउंड को लेआउट के लिए एक सापेक्ष लेआउट में उपयोग करना महत्वपूर्ण है।
एंटोनेक्स

संरेखण की नियंत्रण की
गति को

16

यदि आप एक अलग पक्ष से लेना चाहते हैं: पृष्ठभूमि पर एक पठनीय के साथ एक TextView होना आसान लगता है:

 <TextView
            android:id="@+id/text"
            android:background="@drawable/rounded_rectangle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        </TextView>

10
इस जवाब के साथ समस्या यह है कि आप imageView जैसी पृष्ठभूमि विशेषताओं को नियंत्रित नहीं कर सकते। उदाहरण के लिए पैमाना।
जीसस डिमेरिक्स

6

आप संभवतः कर सकते हैं

  • वर्ग ImageView से विरासत में मिली एक नई कक्षा बनाते हैं और
  • विधि को ओवरराइड करें onDrawsuper.onDraw()पहले उस विधि में बुलाओ और
  • फिर कुछ टेक्स्ट ड्रा करें जिन्हें आप प्रदर्शित करना चाहते हैं।

यदि आप इसे इस तरह करते हैं, तो आप इसे एकल लेआउट घटक के रूप में उपयोग कर सकते हैं जो अन्य घटकों के साथ मिलकर लेआउट करना आसान बनाता है।



5

बहुत से रास्ते हैं। आप RelativeLayout या AbsoluteLayout का उपयोग करें।

रिश्तेदार के साथ, आप उदाहरण के लिए बाईं ओर माता-पिता के साथ छवि संरेखित कर सकते हैं और पाठ को माता-पिता के बाईं ओर भी संरेखित कर सकते हैं ... तो आप इसे पंक्तिबद्ध करने के लिए पाठ दृश्य पर हाशिये और पैडिंग और गुरुत्वाकर्षण का उपयोग कर सकते हैं छवि पर चाहते हैं।


1
मैं दुर्घटना से इस विधि पर आया था। लेकिन यह बहुत आसान है जब आप एक इमेजबटन या एक इमेजव्यू पर कुछ टेक्स्ट डालना चाहते हैं। उदाहरण - वर्तमान परिस्थितियों की छवि पर वर्तमान तापमान डालें।
फोबोस

2

आप एक टेक्स्ट दृश्य का उपयोग कर सकते हैं और इसकी पृष्ठभूमि को उस छवि में बदल सकते हैं जिसे आप उपयोग करना चाहते हैं


इस जवाब के साथ समस्या यह है कि आप imageView जैसी पृष्ठभूमि विशेषताओं को नियंत्रित नहीं कर सकते। उदाहरण के लिए पैमाना।
यीशु डिमिक्स

2

इसके लिए आप केवल एक TextView का उपयोग android:drawableLeft/Right/Top/Bottomकरके किसी चित्र को TextView की स्थिति में ला सकते हैं। इसके अलावा आप TextView और के साथ drawable के बीच कुछ पैडिंग का उपयोग कर सकते हैंandroid:drawablePadding=""

इसे इस तरह उपयोग करें:

<TextView
    android:id="@+id/textAndImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:drawableBottom="@drawable/yourDrawable"
    android:drawablePadding="10dp" 
    android:text="Look at the drawable below"/>

इसके साथ आपको एक अतिरिक्त ImageView की आवश्यकता नहीं है। टेक्स्टव्यू के एक से अधिक साइड पर दो ड्रॉइबल्स का उपयोग करना भी संभव है।

इसका उपयोग करके आप केवल एक ही समस्या का सामना कर सकते हैं, वह यह है कि ड्रॉबल को ImageView के तरीके से नहीं बढ़ाया जा सकता है।


2

नीचे दिए गए कोड का प्रयास करें यह आपकी मदद करेगा `

  <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="150dp">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:src="@drawable/gallery1"/>


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="#7ad7d7d7"
        android:gravity="center"
        android:text="Juneja Art Gallery"
        android:textColor="#000000"
        android:textSize="15sp"/>
</RelativeLayout>

0

नीचे दिए गए कोड से आपको मदद मिलेगी

public class TextProperty {
    private int heigt;                              //读入文本的行数
    private String []context = new String[1024];    //存储读入的文本

    /*
     *@parameter wordNum
     *
     */
    public TextProperty(int wordNum ,InputStreamReader in) throws Exception {
        int i=0;
        BufferedReader br = new BufferedReader(in);
        String s;
        while((s=br.readLine())!=null){
            if(s.length()>wordNum){
                int k=0;
                while(k+wordNum<=s.length()){
                    context[i++] = s.substring(k, k+wordNum);
                    k=k+wordNum;
                }
                context[i++] = s.substring(k,s.length());
            }
            else{
                context[i++]=s;
            }
        }
        this.heigt = i;
        in.close();
        br.close();
    }


    public int getHeigt() {
        return heigt;
    }

    public String[] getContext() {

        return context;
    }
}
public class MainActivity extends AppCompatActivity {

    private Button btn;
    private ImageView iv;
    private final int WORDNUM = 35;  //转化成图片时  每行显示的字数
    private final int WIDTH = 450;   //设置图片的宽度

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        iv = (ImageView) findViewById(R.id.imageView);
        btn = (Button) findViewById(R.id.button);

        btn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                int x=5,y=10;
                try {
                    TextProperty tp = new TextProperty(WORDNUM, new InputStreamReader(getResources().getAssets().open("1.txt")));
                    Bitmap bitmap = Bitmap.createBitmap(WIDTH, 20*tp.getHeigt(), Bitmap.Config.ARGB_8888);
                    Canvas canvas = new Canvas(bitmap);
                    Paint paint = new Paint();
                    paint.setColor(Color.WHITE);
                    paint.setTextAlign(Paint.Align.LEFT);
                    paint.setTextSize(20f);

                    String [] ss = tp.getContext();
                    for(int i=0;i<tp.getHeigt();i++){
                        canvas.drawText(ss[i], x, y, paint);
                        y=y+20;
                    }

                    canvas.save(Canvas.ALL_SAVE_FLAG);
                    canvas.restore();
                    String path = Environment.getExternalStorageDirectory() + "/image.png";
                    System.out.println(path);
                    FileOutputStream os = new FileOutputStream(new File(path));
                    bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
                    //Display the image on ImageView.
                    iv.setImageBitmap(bitmap);
                    iv.setBackgroundColor(Color.BLUE);
                    os.flush();
                    os.close();
                }
                catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }
}```
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.