2013-03-21 3 views
2

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

tv = new TextView(this); 
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, 60); 

    tv.setLayoutParams(layoutParams); 

    tv.setText("Some Text, can be long as much as required"); 
    tv.setTextColor(Color.BLACK); 
    tv.setBackgroundColor(Color.WHITE); 

    Bitmap testB; 
    timer = new Timer(); 
    timer.schedule(new TickerTask(), 1000,25); 
    testB = Bitmap.createBitmap(600, 20, Bitmap.Config.ARGB_8888); 
    Canvas c = new Canvas(testB); 

    tv.layout(0, 0, 380, 100); 
    tv.draw(c); 

    iv = (ImageView) findViewById(R.id.menuIcon); 
    iv.setLayoutParams(layoutParams); 
    iv.setBackgroundColor(Color.GREEN); 
    iv.setImageBitmap(testB); 

Проблема: параметры не работают, как указаны в коде. Полный текст не отображается после преобразования изображения.

+0

Не совсем .. Как посоветовал об использовании фонового изображения и сохранить изменения его текст .. Что-то вроде ImageButton ..? – ngesh

+0

Попробуйте это http://stackoverflow.com/questions/2801116/converting-a-view-to-bitmap-without-displaying-it-in-android – sinek

+0

Задача, которую я должен выполнить, требует преобразования текста в изображение. Я выполняю анимацию по тексту горизонтально, но не могу обнаружить, что, когда текст полностью прошел предел текстового поля слева. Ширина изображения может помочь мне применить перезапуск по анимации после завершения –

ответ

0

Это работало для меня, для тех, кто хочет то же самое, для того чтобы достигнуть

BitmapDrawable drawable = (BitmapDrawable) iv.getDrawable(); 
    Bitmap bitmap = drawable.getBitmap(); 
    //Bitmap bitmap = testB; 
    File sdCardDirectory = Environment.getExternalStorageDirectory(); 
    File image = new File(sdCardDirectory, "test.png"); 

    boolean success = false; 

    // Encode the file as a PNG image. 
    FileOutputStream outStream; 
    try { 

     outStream = new FileOutputStream(image); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
     /* 100 to keep full quality of the image */ 

     outStream.flush(); 
     outStream.close(); 
     success = true; 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    if (success) { 
     Toast.makeText(getApplicationContext(), "Image saved with success", 
       Toast.LENGTH_LONG).show(); 
    } else { 
     Toast.makeText(getApplicationContext(), 
       "Error during image saving", Toast.LENGTH_LONG).show(); 
    } 
1

Я считаю, что он занимает весь экран, потому что у вас нет контейнера, такого как Linear Layout, который затем содержит 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> 
0

я попробовал Text2Jpg которые выглядят потрясающе и конвертируют любой текст в jpg-изображение с или без фонового изображения.

Использование StaticLayout:

TextPaint mTextPaint = new TextPaint(); 
    mTextPaint.setColor(bordercolor); 
    mTextPaint.setTextSize(textSize); 
    StaticLayout mTextLayout = new StaticLayout(text, mTextPaint, (int) (screen_width * .75f), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); 
    // DynamicLayout mTextLayout = new DynamicLayout(text, mTextPaint,(int)(screen_width * .75f), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); 
    //mTextPaint.setStrokeWidth(screen_width * .70f); 
    canvas.translate(screen_width * .12f, screen_height * .06f); //position the text 
    mTextLayout.draw(canvas);