2012-06-19 62 views
7

Tôi muốn tạo một ứng dụng giống như màn hình đang mở của android.I đang tự động thêm hình ảnh vào các hàng của tableLayout. Tôi chỉ định nghĩa tableLayout trong tệp xml và mã còn lại là trong java. Tôi đã thêm hình ảnh thành công nhưng tôi không nhận được bất kỳ sự trợ giúp nào với cài đặt văn bản của hình ảnh đó (tôi muốn hiển thị văn bản dưới hình ảnh) và hình ảnh là một phần đệm cụ thể. Làm thế nào để làm điều đó? Cảm ơn trước.Thêm văn bản vào hình ảnh trong android theo lập trình

+1

tôi đề nghị bạn sử dụng GridView. –

Trả lời

8

gì bạn thay vì có thể làm là đặt một TextView trong lớp phủ lên ImageView sử dụng một RelativeLayout :)

+0

Có.Tôi đã thực hiện ngay bây giờ.Tôi đã quản lý để thêm FrameLayout trong các hàng trong Bảng và hoạt động tốt. Cảm ơn tất cả. – dka72

+0

Đó là lựa chọn tốt nhất. Dễ dàng, ánh sáng và hiệu suất tốt – StErMi

+1

Badass idea -.- +1 – khandelwaldeval

27

Sử dụng các chức năng sau đây để viết văn bản trên hình ảnh:

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

Làm cách nào để thêm văn bản in đậm trên bitmap? có một lựa chọn nào không? plz hướng dẫn tôi. –

+0

phương pháp của bạn đã hoạt động đối với tôi ngoại trừ kích thước văn bản. Tôi đã phải thiết lập kích thước văn bản (x5) giá trị của bạn để có thể đọc được trong biểu tượng của tôi drawable. điều này có thể là do quy mô chuyển đổi cho thiết bị của tôi. cảm ơn! – droideckar

+3

i mextext ở đây là gì? –

2

tôi đang thực hiện thành công như vậy vấn đề thêm văn bản trên hình ảnh. Chỉ cần nhìn vào mã sau đây. Đầu tiên hãy xem một bố cục tương đối trong bố cục đó, hãy xem ImageView sau EditText đó và sau nút đó. Cung cấp cho mỗi một id. Viết hàm loadBitmapFromView bên dưới.

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

và khi nhấp vào nút.

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

Thưởng thức ...

Để tham khảo nhiều hơn, tham khảo bên dưới ảnh chụp màn hình: enter image description here

+0

cảm ơn vì giải pháp tốt đẹp này. bạn có thể giúp xin vui lòng với dòng mã 'Bitmap bitmap = loadBitmapFromView (relativeLayout)' Tôi không thể có được một 'tham chiếu' đến' relativeLayout' ... nếu tôi cung cấp 'ID' của' RelativeLayout' nó không chấp nhận nó. Bạn có thể giải thích một chút được không. Cảm ơn –

+1

Vượt qua chế độ xem gốc của bạn, Trong trường hợp của tôi, đó là bố cục tương đối. –

+0

cũng .. tôi không thể hình dung được điều này. bạn có thể vui lòng giải thích thêm một chút với một số mã mẫu .. cảm ơn! –

Các vấn đề liên quan