您好我正在尝试绘制一个复杂的视图,由xml布局定义为Bitmap(之后绘制到画布)。然后,当数据模型中的某些内容发生变化时,该视图会定期更新。 更改静态定义的TextView非常完美,但是将新视图添加到linearLayout无论如何都不起作用。我的错误在哪里?
这就是我添加新视图的方式:
linearLayoutContainer.removeAllViewsInLayout();
for (int i = 0 ; i < 5; i ++) {
TextView child = new TextView(getContext());
child.setText("example" + i);
child.setVisibility(View.VISIBLE);
linearLayoutContainer.addView(child, i , new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT));
i++;
}
这就是我创建位图的方法:
sideBarView.refresh();
sideBarView.invalidate();
sideBarBitmap = sideBarView.getDrawingCache();
非常适合更新已经在xml中定义的TextViews,但新添加的视图不可见。
我的xml布局如下:
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="some"
android:textSize="20dp" />
<LinearLayout
android:id="@+id/linearLayoutContainer"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="0.33"
android:gravity="center_horizontal" >
<!-- THE CONTAINER -->
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:layout_weight="0.66"
android:gravity="center"
android:orientation="horizontal" >
<TextView
android:id="@+id/TextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="2dp"
android:text="20%"
android:textSize="30dp" />
<TextView
android:id="@+id/TextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="3dp"
android:text="35%"
android:textSize="30dp" />
</LinearLayout>
答案 0 :(得分:1)
我解决了我的问题。通过添加新视图刷新我的视图后,我应该再次在根视图上调用measure。这就是我做错了(伪代码):
init code:
created rootView
measure
getDrawingCache
draw
update code:
update rootView
invalidate rootView
getDrawingCache
draw
所以问题出现在更新代码中,它没有再次调用度量,因此子视图没有被重新测量,当然在活动中添加视图时不会发生这种情况,这就是所需要的:< / p>
update code:
update rootView
measure
invalidate rootView
getDrawingCache
draw
并以实际代码:
private void refreshViews() {
sideBarView.refresh();
sideBarView.measure(
MeasureSpec.getSize(sideBarView.getMeasuredWidth()),
MeasureSpec.getSize(sideBarView.getMeasuredHeight()));
sideBarView.layout(0, 0,
MeasureSpec.getSize(sideBarView.getMeasuredWidth()),
MeasureSpec.getSize(sideBarView.getMeasuredHeight()));
sideBarView.invalidate();
sideBarView.buildDrawingCache();
sideBarBitmap = sideBarView.getDrawingCache();
}
答案 1 :(得分:0)
尝试在sideBarView.getDrawingCache()之前调用sideBarView.buildDrawingCache()。您的视图可能没有在invalidate和getDrawingCache调用之间重新绘制,因此不会重建其缓存。