2011-09-04 15 views
9

"Ekran görüntüsü bir Bitmap'e bir TextView" konusuna göre bulunur.Bir Bitmap'e bir TextView nasıl çizilir (hiç ekranda çizilmeden)

Sorunumdaki fark, ilk önce görünümün (önceden yapılmış olan tüm düzen ve ölçüm çalışmalarıyla) çizilmesi ve daha sonra Bitmap'e bağlı bir Tuval'e çizilmesidir.

Sadece bir Bitmap'e görüntülenen ekranda gösterilmeden bir TextView'ı sıfırdan oluşturmak istiyorum.

Bu, zaten üzerinde çalışılan temel yapılandırmadır. TextView bir tıklama kendisini bir Bitmap içine çeker ve bir ImageView olarak ayarlar.

<?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" android:background="#fff"> 

    <TextView android:id="@+id/tv" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:text="The Quick Brown Fox Jumps Over The Lazy Dog." 
     android:textSize="20dip" android:background="#abcdef" 
     android:textColor="#000" android:padding="10dip" 
     android:layout_margin="10dip" /> 

    <ImageView android:id="@+id/iv" android:layout_width="449px" 
     android:layout_height="47px" android:background="#56789a" 
     android:layout_margin="10dip" /> 
</LinearLayout> 

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

    findViewById(R.id.tv).setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Bitmap bmp = Bitmap.createBitmap(449, 47, Bitmap.Config.ARGB_8888); 
      Canvas canvas = new Canvas(bmp); 

      v.draw(canvas); 

      ImageView iv = (ImageView) findViewById(R.id.iv); 
      iv.setImageBitmap(bmp); 
     } 
    }); 
} 

Şimdi sorunlu kısım geliyor. Java'da bir TextView oluşturacağım ve bunun bir Bitmap'e doğruca çizilmesini istiyorum. Bundan sonra bunu bir ImageView olarak ayarlayacağım. Bu çalışmasını :(

Bitmap bmp = Bitmap.createBitmap(449, 47, Bitmap.Config.ARGB_8888); 
Canvas canvas = new Canvas(bmp); 

TextView tv = new TextView(this); 
tv.setText("THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG"); 
tv.setTextSize(55f); 
tv.setTextColor(this.getResources().getColor(android.R.color.black)); 
tv.draw(canvas); 

ImageView iv = (ImageView) findViewById(R.id.iv); 
iv.setImageBitmap(bmp); 

Bu da işe yaramadı setDrawingCacheEnabled(), ölçü() ve requestLayout() deneme. OnCreate ne de bir OnClickListener içinde ne çalışmıyor.

cevap

19

asla Burada, bir görünüme ait olan veya bir bitmap'ten türetilen bir tuvalin nasıl çizileceğine dair iki yöntem vardır:

//method 1 
TextPaint tp = new TextPaint(TextPaint.ANTI_ALIAS_FLAG); 
tp.setColor(Color.WHITE); 
tp.setTextSize(30); 
tp.setShadowLayer(5, 2, 2, Color.CYAN); 
StaticLayout sl=new StaticLayout("This is the first sample text 
     which will be wrapped within the text box.",tp,300, 
     Layout.Alignment.ALIGN_NORMAL, 1f,0f,false); 

canvas.save(); 
canvas.translate(50, 20); //position text on the canvas 
sl.draw(canvas); 
canvas.restore(); 

//method 2 
TextView textView = new TextView(StartActivity.this); 
textView.layout(0, 0, 300, 500); //text box size 300px x 500px 
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 30); 
textView.setTextColor(Color.WHITE); 
textView.setShadowLayer(5, 2, 2, Color.CYAN); //text shadow 
textView.setText("This is the second sample 
     text which will be wrapped within the text box."); 
textView.setDrawingCacheEnabled(true); 
canvas.drawBitmap(textView.getDrawingCache(), 50, 200, null); 
    //text box top left position 50,50 
+0

Bana çok yardımcı oldu. –