Sunday, September 4, 2011

[android-developers] how to draw a TextView into a Bitmap (without ever beeing drawn on the display)

hi,

many posts are found according to the topic "screenshot a TextView
into a Bitmap".

Well, the difference to my problem is, that first the view is drawn on
the display (with all layouting and measuring work already done) and
then drawn into a Canvas connected to a Bitmap.

I just want to create a TextView from scratch without ever beeing
shown on the display which is rendered into a Bitmap.

--- cut --- cut --- cut --- cut --- cut --- cut --- cut --- cut ---
cut --- cut --- cut --- cut --- cut --- cut --- cut --- cut --- cut
---

This one is the basis configuration which is already workin. A click
on the TextView draws itself into a Bitmap and sets it to an
ImageView.

<?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>

public class WorkingActivity extends Activity {

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

--- cut --- cut --- cut --- cut --- cut --- cut --- cut --- cut ---
cut --- cut --- cut --- cut --- cut --- cut --- cut --- cut --- cut
---

Now comes the problematic part. I will create a TextView in Java and I
want this one to be drawn straight into a Bitmap. After this I will
set this to an ImageView. I never got this running :(

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

This doesn't work neither in onCreate nor in a OnClickListener.
Experimenting with setDrawingCacheEnabled(), measure() and
requestLayout() didn't work, too...

Can you help me please on this?

Greetings,
Marco

--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

No comments:

Post a Comment