2015-07-13 4 views
0

Я спросил this вопрос о рисовании текста на холсте, и мне сообщили, я мог бы добавить текст представление в макет и сделать макет на холсте, как thisПреобразовать Canvas для Bitmap Android - черный фон

Моя проблема заключается , когда я пытаюсь преобразовать в bmp и display, я получаю черный прямоугольник.

Вот мой код:

LinearLayout layout = new LinearLayout(getActivity()); 
    TextView textView = new TextView(getActivity()); 
    textView.setVisibility(View.VISIBLE); 
    textView.setText("صيققق٣يفاوووووومالؤؤتمكا"); 
    layout.addView(textView); 
    layout.setBackgroundColor(getActivity().getResources().getColor(R.color.transparent)); 
    textView.setTextColor(getResources().getColor(R.color.white)); 
    layout.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 
    Bitmap bitmap = Bitmap.createBitmap(layout.getMeasuredWidth(), layout.getMeasuredHeight(), Bitmap.Config.RGB_565); 
    //layout.draw(canvas); 
    Canvas canvas = new Canvas(bitmap); 
    layout.layout(0,0, canvas.getWidth(), canvas.getHeight()); 
    layout.draw(canvas); 

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

Может кто-то отметить мне, где я ошибаюсь. Спасибо

+0

Вы не устанавливая LayoutParams в 'LinearLayout' –

+0

@ DJ-DOO все правильно: 1. Вы создаете пустой (черный) растровое изображение и рисовать Тэй на canwas. 2. Вы рисуете на макете черный экран. – Tronum

+0

@Greengoblin извините, я пропустил этот код извинения, я отредактировал свой вопрос –

ответ

0

Вы не создаете Bitmap с раскладки. Создать его, используя код ниже:

layout.setDrawingCacheEnabled(true); 
layout.buildDrawingCache(); 
Bitmap bitmap = layout.getDrawingCache(); 
+0

Я нашел, что это не всегда работает. Это зависит от того, где обрабатывается представление. [Иногда] (http://stackoverflow.com/questions/11560882/call-to-getdrawingcache-returns-null-when-scroll-is-enabled) вызов getDrawingCache() возвращает null, поэтому способ, которым я опубликовал, гарантирует, что есть фон (в моем случае белый ... не более черные экраны), а затем нарисуйте содержимое макета/представления. PS Мой ответ также опирается на ответ по ссылке. – user960914

1

Я не могу понять, что проблема с рисования текста на холсте, но попробовать, что:

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ImageView imageView = (ImageView) findViewById(R.id.image_for_test_displaying); 
     imageView.setImageBitmap(getBitmapFromArabicText("صيققق٣يفاوووووومالؤؤتمكا")); 
    } 

    private Bitmap getBitmapFromArabicText(String string) { 
     Paint paint = new Paint(); 
     //size can be customized 
     Bitmap bitmap = Bitmap.createBitmap(400, 400, Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(bitmap); 
     //Draw black background 
     paint.setColor(Color.BLACK); 
     canvas.drawRect(0, 0, bitmap.getWidth(), bitmap.getHeight(), paint); 
     //draw white text 
     paint.setColor(Color.WHITE); 
     //text position you can manage from yourself 
     canvas.drawText(string, 10, 10, paint); 
     return bitmap; 
    } 
} 
+0

Мне нужно будет использовать подход макета, поскольку мне нужно будет добавить несколько арабских текстовых представлений. –

+0

@ DJ-DOO ваша проблема не нарисовать вид на холсте. Проблема в том, что этот взгляд не привязан к реальному родителю, и у них нет реального рисования. Вы можете проверить это: прикрепите созданный макет к определенному контейнеру из своего макета активности, а затем нарисуйте его на холсте - все будет хорошо. – Tronum

+0

, но это не сработает при попытке печати .. он может работать для отображения на экране, который я не хочу делать. –

0

Этот вопрос уже может ответить, но вот мое простое решение для того, чтобы убедиться, что фон и просмотр отображаются нормально. «Контент» был таблицей.

Bitmap foreground = Bitmap.createBitmap(content.getWidth(), content.getHeight(), 
      Config.ARGB_8888); 
    Canvas canvas = new Canvas(foreground); 
    canvas.drawColor(Color.WHITE); 
    content.draw(canvas); 
Смежные вопросы