measure () не работает должным образом с динамическими макетами и textView - Android - PullRequest
8 голосов
/ 24 марта 2011

Я хочу преобразовать представление RelativeLaout в растровое изображение. Я попробовал другие ответы и другие варианты без успеха. Мой вид XML выглядит следующим образом:

----RelativeLayout
-------ImageView
-------TextView

У каждого есть меры wrap_content.

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

  LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.localviewlayout, null);

ImageView img = (ImageView) v.findViewById(R.id.imgPlace);
img.setImageBitmap(MyDynamicBitmap);

TextView txt1 = (TextView)v.findViewById(R.id.text1);
txt1.setText(MyDynamicText);
return v;

После этого:


//in measure() i get a nullpointerException on RelativeLayout.onMeasure().I also have tried //with MeasureSpec.EXACTLY
v.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
                            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
Bitmap b = Bitmap.createBitmap( v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
v.draw(new Canvas(b));
Paint p = new Paint();
myMainCanvas.drawBitmap(b, myPointX, myPointY, p);                   

Содержимое textView объекта RelativeLayout является динамическим, поэтому я не могу знать ширину или высоту текста. Кроме исключения, если я вручную установил достаточный размер для функции меры (с единицей 0), мой динамический текст не отображается полностью. Я надеюсь, что вы можете помочь мне, потому что сейчас я застрял. Спасибо

1 Ответ

22 голосов
/ 22 мая 2011

Попробуйте добавить

v.setLayoutParams(new LayoutParams(
    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

перед вызовом measure().Это исправляет NullPointerException?

...