2012-06-19 207 views
7

我想創建一個應用程序,就像打開android.I屏幕一樣,我將動態添加圖像到tableLayout的行中。我只在xml文件中定義了tableLayout,剩下的代碼是用java編寫的。我已成功添加圖像,但我沒有得到任何幫助設置該圖像的文本(我想顯示圖像下的文本)和圖像是一個特定的填充。如何做?提前致謝。以編程方式在android中將文本添加到圖像

+1

我建議你使用GridView控件。 –

回答

8

什麼可以代替做的是使用的RelativeLayout把一個TextView在覆蓋到的ImageView :)

+0

是的,我已經做到了。我設法在Table行中添加了FrameLayout,它工作得很好。謝謝大家。 – dka72

+0

這是最好的選擇。輕鬆,輕便和良好的性能 – StErMi

+1

巴達思的想法-.- +1 – khandelwaldeval

27

使用下面的函數寫文字上的圖像:

private BitmapDrawable writeTextOnDrawable(int drawableId, String text) { 

    Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId) 
      .copy(Bitmap.Config.ARGB_8888, true); 

    Typeface tf = Typeface.create("Helvetica", Typeface.BOLD); 

    Paint paint = new Paint(); 
    paint.setStyle(Style.FILL); 
    paint.setColor(Color.WHITE); 
    paint.setTypeface(tf); 
    paint.setTextAlign(Align.CENTER); 
    paint.setTextSize(convertToPixels(mContext, 11)); 

    Rect textRect = new Rect(); 
    paint.getTextBounds(text, 0, text.length(), textRect); 

    Canvas canvas = new Canvas(bm); 

    //If the text is bigger than the canvas , reduce the font size 
    if(textRect.width() >= (canvas.getWidth() - 4))  //the padding on either sides is considered as 4, so as to appropriately fit in the text 
     paint.setTextSize(convertToPixels(mContext, 7));  //Scaling needs to be used for different dpi's 

    //Calculate the positions 
    int xPos = (canvas.getWidth()/2) - 2;  //-2 is for regulating the x position offset 

    //"- ((paint.descent() + paint.ascent())/2)" is the distance from the baseline to the center. 
    int yPos = (int) ((canvas.getHeight()/2) - ((paint.descent() + paint.ascent())/2)) ; 

    canvas.drawText(text, xPos, yPos, paint); 

    return new BitmapDrawable(getResources(), bm); 
} 



public static int convertToPixels(Context context, int nDP) 
{ 
    final float conversionScale = context.getResources().getDisplayMetrics().density; 

    return (int) ((nDP * conversionScale) + 0.5f) ; 

} 
+0

如何在位圖上添加粗體文本?有沒有選擇? PLZ指導我。 –

+0

除了文字大小之外,您的方法適用於我。我必須將文本大小(x5)設置爲可繪製的圖標中的可讀性。這可能是由於我的設備的轉換比例。謝謝! – droideckar

+3

我在這裏的mContext是什麼? –

2

餘米成功地實施這樣的在圖像上添加文字的問題。只要看看下面的代碼。首先將一個視圖作爲該佈局中的相對佈局,在該EditText之後以及該按鈕之後使用ImageView。給每一個ID。在下面寫一個loadBitmapFromView函數。

public Bitmap loadBitmapFromView(View v) { 
     Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Config.ARGB_8888); 
     Canvas c = new Canvas(b); 
     v.layout(v.getLeft(), v.getTop(), v.getRight(), v.getBottom()); 
     v.draw(c); 
     return b; 
    } 

和按鈕的點擊。

   Bitmap bitmap = loadBitmapFromView(relativeLayout); 
       File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath(),   "folderName"); 
       if (!dir.exists()) 
        dir.mkdirs(); 

       File file = new File(dir, "capture.jpg"); 
       try { 
        FileOutputStream fos = new FileOutputStream(file); 
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
        imageView.setImageBitmap(bitmap);  
       } catch (Exception e) { 
        Log.e("ExpressionEditImageActivity", "Error, " + e); 
       } 

享受...

更多參考,請參考下面的截圖: enter image description here

+0

感謝這個不錯的解決方案。你可以幫助請與代碼行'位圖bitmap = loadBitmapFromView(relativeLayout)'我無法獲得'reference'到'relativeLayout' ...如果我給''RelativeLayout' ID'它不接受它。請你稍微解釋一下。謝謝 –

+1

傳遞你的父視圖,在我的情況下,它是相對佈局。 –

+0

好..我不能夠想象這一點。可以請你解釋一些示例代碼..謝謝! –

相關問題