我对Android很新,所以不要马上给我开枪!
我在android中使用linearlayout绘制图形,我正在绘制图形并将其设置为线性布局中的背景图像。
linearlayout是相对布局的子元素,在布局xml中定义: relativeLayout还包含一些其他textview和edittext。
<RelativeLayout
android:id="@+id/rl"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/ll_graph"
android:layout_width="fill_parent"
android:layout_height="200dp"
android:orientation="vertical"
android:layout_below="@+id/etMemo" >
</LinearLayout>
</RelativeLayout>
在OnCreate中:
ll_graph = (LinearLayout) findViewById(R.id.ll_graph);
接下来在OnStart中我想绘制图形,但此时ll_graph的宽度和高度为0,因此不显示任何内容。 如果我在表单上放置一个按钮来执行相同的代码,则宽度和高度与预期一致,并且图形将完美绘制。 我在这里缺少什么?
答案 0 :(得分:0)
在onCreate()和onStart()方法中,Activity不一定可见。而是将您的绘图代码放在onwindowFocusChanged(boolean)中,因为API文档声明“这是该活动对用户是否可见的最佳指标。”
答案 1 :(得分:0)
Android将视图分为两个阶段: 测量通过 布局通行证 因此,此代码等待该阶段,并且布局布局后,它将通知您更改。
ViewTreeObserver vto = ll_graph.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ll_graph.getViewTreeObserver().removeGlobalOnLayoutListener(
this);
int ll_width = ll_graph.getWidth();
int ll_height = ll_graph.getHeight();
}
});
答案 2 :(得分:0)
此时尚未衡量视图。但是当你按下按钮时,查看
为了在从View外部测量View时执行绘图,您可以将OnPreDrawListener或OnGlobalLayoutListener设置为View的ViewTreeObserver。 在活动的onCreate()上设置它。
ll_graph.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
ll_graph.getViewTreeObserver().removeOnPreDrawListener(this);
//do your stuff
return true;
}
});
答案 3 :(得分:0)
您还可以将runnuble发布到视图的处理程序。创建视图时,将执行此runnable。
@Override
protected void onCreate(final Bundle b) {
super.onCreate(b);
ll_graph.post(new Runnable() {
@Override
public void run() {
ll_graph.setBackgroundResiurce(resId);
}
});
}