Преобразование TextView-> Bitmap-> ImageView, и ничего не появляется - PullRequest
4 голосов
/ 12 ноября 2010

Я начал тестовый проект, чтобы разобраться в этом.Без изменений в main.xml.Я хочу создать ImageView размером с виджет (80x100), который содержит растровое изображение, преобразованное из TextView.Да, это звучит очень окольно, но это только для тестирования;В конце я хочу, чтобы ImageView имел фоновое изображение и несколько TextView.Я не уверен, что именно я делаю неправильно, но на экран ничего не выводится.

Это проблема с объявлением TextView / ImageView и передачей его "this" в конструкторе?Это проблема с моим layoutParams?Вот код:

package com.doaf.testproject;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class TestProject extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TextView tv = new TextView(this);
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(80, 100);
        tv.setLayoutParams(layoutParams);
        tv.setText("testing 1 2 3");
        tv.setTextColor(0xFFFFFF);
        tv.setBackgroundColor(0x555555);

        Bitmap testB;
        testB = loadBitmapFromView(tv);

        ImageView iv = new ImageView(this);
        iv.setLayoutParams(layoutParams);
        iv.setBackgroundColor(0x555555);
        iv.setImageBitmap(testB);

        setContentView(iv);
    }

    public static Bitmap loadBitmapFromView(View v) {
        Bitmap b = Bitmap.createBitmap(80, 100, Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(b);
        v.layout(0, 0, 80, 100);
        v.draw(c);
        return b;
    }
}

Спасибо за любую помощь, которую вы можете предоставить.Я относительно новичок в Android, и довольно потерян с этим.

Ответы [ 3 ]

7 голосов
/ 13 ноября 2010

Я считаю, что он занимает весь экран, потому что у вас нет контейнера, такого как линейный макет, который затем содержит ImageView с ограничениями макета, поэтому ImageView расширяется, чтобы заполнить доступный экран.Попробуйте это:

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

        TextView tv = new TextView(this);
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(80, 100);
        tv.setLayoutParams(layoutParams);
        tv.setText("testing 1 2 3");
        tv.setTextColor(Color.BLACK);
        tv.setBackgroundColor(Color.TRANSPARENT);

        Bitmap testB;

        testB = Bitmap.createBitmap(80, 100, Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(testB);
        tv.layout(0, 0, 80, 100);
        tv.draw(c);

        ImageView iv = (ImageView)findViewById(R.id.menuIcon);
        iv.setLayoutParams(layoutParams);
        iv.setBackgroundColor(Color.GRAY);
        iv.setImageBitmap(testB);
        iv.setMaxHeight(80);
        iv.setMaxWidth(80);
    }

И в вашем файле main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

    <ImageView android:id="@+id/menuIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


</LinearLayout>

Я не уверен, чего вы хотите достичь, но я уверен, что есть более эффективные способыподходить к нему.

1 голос
/ 13 ноября 2010

Ваше TextView необходимо измерить (вызвать меру ()) и выложить (вызвать макет ()), прежде чем вы сможете его нарисовать.Вы не делаете ни того, ни другого.

1 голос
/ 12 ноября 2010

Быстрая модификация кода, попробуйте это и посмотрите, хотите ли вы архивировать:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    TextView tv = new TextView(this);
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(80, 100);
    tv.setLayoutParams(layoutParams);
    tv.setText("testing 1 2 3");
    tv.setTextColor(Color.BLACK);
    tv.setBackgroundColor(Color.TRANSPARENT);

    Bitmap testB;

    testB = Bitmap.createBitmap(80, 100, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(testB);
    tv.layout(0, 0, 80, 100);
    tv.draw(c);

    ImageView iv = new ImageView(this);
    iv.setLayoutParams(layoutParams);
    iv.setBackgroundColor(Color.GRAY);
    iv.setImageBitmap(testB);

    setContentView(iv);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...