2012-06-19 14 views
7

アンドロイドの画面を開くのと同じようにアプリケーションを作成したいのですが、動的にimageをtableLayoutの行に追加しています。私はxmlファイルでtableLayoutを定義し、残りのコードはJavaにあります。私は正常に画像を追加しましたが、私はその画像のテキストを設定すること(私は画像の下にテキストを表示したい)と画像を特定の詰め物にする助けを得ていません。アンドロイドで画像にテキストを追加する

+1

私はあなたがGridViewコントロールを使用することをお勧めします。 –

答えて

8

あなたの代わりに何ができるかは、RelativeLayoutを使ってImageViewのにオーバーレイでのTextViewを置くことです:)

+0

はい。私は今それをしました。私はテーブル行にFrameLayoutを追加することができました。それはうまくいきました。ありがとうございました。 – dka72

+0

これは最適なオプションです。簡単で、軽く、良いパフォーマンス – StErMi

+1

Badass idea -.- +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)をあなたの値を私のアイコンdrawableで読むことができるように設定しなければならなかった。これは私のデバイスの変換スケールに起因する可能性があります。ありがとう! – droideckar

+3

ここでmContextは何ですか? –

2

私は正常な実装メートルイメージにテキストを追加する問題。次のコードを見てください。最初の1つのビューは、そのレイアウトの相対レイアウトとして、その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 bitmap = loadBitmapFromView(relativeLayout) 'relativeLayout'への'参照 'を取得できません... 'RelativeLayout'の' ID'を受け入れると受け入れませんそれ。少し説明していただけますか?ありがとう –

+1

あなたの親ビューを渡す、私の場合、それは相対的なレイアウトです。 –

+0

まあ、私はこれを視覚化できません。いくつかのサンプルコードでもう少し説明してください。ありがとう! –

関連する問題