【发布时间】:2013-04-29 14:35:01
【问题描述】:
我正在尝试实现 ViewHolder 模式以提高性能,同时在地图上的画布上绘图。
我需要为我的标记创建一些标签。在draw()进行数据处理时调用该方法
// now we create label view and convert it into bitmap
private Bitmap createLabelBitmap(GisLaborHistoryObject object, HistoryPoint point) {
// create view from xml
if (vh == null) {
vh = new ViewHolder();
vh.view = inflater.inflate(R.layout.map_gis_history_label, null, false);
vh.tv = (TextView) vh.view.findViewById(R.id.gislabeltext);
}
// set label content
if (vh.tv != null) {
if (!mSingleLaborHistory) {
String name = "";
name = object.getDisplayName();
if (name == null || "".equals(name))
name = object.getPersonId();
if (name == null || "".equals(name))
name = object.getLaborCode();
if (name == null)
name = "";
vh.tv.setText(name);
} else
vh.tv.setText(point.getChangeDate());
}
// measure resulting view
vh.view.measure(spec, spec);
vh.view.layout(0, 0, vh.view.getMeasuredWidth(), vh.view.getMeasuredHeight());
Bitmap b = Bitmap.createBitmap(vh.view.getWidth(), vh.view.getHeight(), Bitmap.Config.ARGB_8888);
canvasToDraw.setBitmap(b);
canvasToDraw.translate(-vh.view.getScrollX(), -vh.view.getScrollY());
vh.view.draw(canvasToDraw);
return b;
}
规格是
spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
结果是 日志猫:
04-29 17:12:34.057: E/AndroidRuntime(389): java.lang.NullPointerException
04-29 17:12:34.057: E/AndroidRuntime(389): at android.widget.TextView.checkForRelayout(TextView.java:5497)
04-29 17:12:34.057: E/AndroidRuntime(389): at android.widget.TextView.setText(TextView.java:2730)
04-29 17:12:34.057: E/AndroidRuntime(389): at android.widget.TextView.setText(TextView.java:2598)
04-29 17:12:34.057: E/AndroidRuntime(389): at android.widget.TextView.setText(TextView.java:2573)
04-29 17:12:34.057: E/AndroidRuntime(389): at com.xxx.android.proj.ui.map.overlays.LaborsMarkerOverlay.createLabelBitmap(LaborsMarkerOverlay.java:164)
我使用的 XML 布局
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gislabeltext"
style="@style/labelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="2dp"
android:paddingRight="2dp" />
这个错误的原因是什么?
【问题讨论】:
-
请注意,这是一个似乎会影响 Android 4.4.3 和 4.4.4 设备的 Android 错误,但在 Android 5.1 - code.google.com/p/android/issues/detail?id=75877 中已修复。
标签: android android-view