在我的APP中,我得到了一个游戏任务栏,其中包含特定的游戏控制(control_1,control_2)。另外,我有两个按钮(Button_1,Button_2),我可以切换可见性。因为我有很多UI-Changes,所以我在asynctask的onPostexecute()中进行可见性切换。 这适用于Android 4.0之前的所有测试设备。但是,当切换其中一个按钮的可见性时,> 4.0设备会删除我的gametaskbar的背景图像。 这不应该发生,我没有更多的想法在哪里看。
我在视图层次结构的底部有一个带有glsurfaceview的framelayout。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/baseframe"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" >
<LinearLayout
android:id="@+id/glSurfaceHolder"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</LinearLayout>
<LinearLayout
android:id="@+id/GameTaskbar"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_gravity="bottom"
android:background="@drawable/bar"
android:orientation="horizontal"
android:visibility="invisible" >
<Button
android:id="@+id/control_1"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="bottom"
android:layout_margin="1dp"
android:background="@drawable/blind" >
</Button>
<Button
android:id="@+id/control_2"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="bottom"
android:layout_margin="1dp"
android:background="@drawable/blind" >
</Button>
</LinearLayout>
<Button
android:id="@+id/Button_1"
android:layout_width="75dp"
android:layout_height="50dp"
android:layout_gravity="right|center_vertical"
android:background="@drawable/drop_64"
android:visibility="invisible" >
</Button>
<Button
android:id="@+id/Button_2"
android:layout_width="75dp"
android:layout_height="50dp"
android:layout_gravity="left|center_vertical"
android:background="@drawable/back_64"
android:visibility="invisible" >
</Button>
</FrameLayout>
这是我切换visibilty的部分:
protected void onPostExecute() {
if(button_1_state){
Button_1.setVisibility(View.VISIBLE);
}
else{
Button_1.setVisibility(View.INVISIBLE);
}
if(button_2_state){
Button_2.setVisibility(View.VISIBLE);
}
else{
Button_2.setVisibility(View.INVISIBLE);
}
...
}
根据这篇文章(Error when refreshing View on top of SurfaceView),我能够将Android4.0特定的不需要的行为减少到不需要的backgroundvisibilityswitch。
我还在按钮上尝试了requestFocus()而没有运气。
当我调试它时,一切看起来都应该和gametaskbar.getVisibility()= 0.但是在离开async-onPostexecute()之后,backgroundimage就会消失。当我在这种情况下不将buttonvisibility切换为隐形时,backgroundimage也会保留。就像我使用错误的ID,我没有。
即使在模拟器中,我也可以重现这种行为。
ps:按钮可见性按需要更改
也许有人有个主意。
答案 0 :(得分:0)
解决了这个问题: 使用GameTaskBar的backgrundimage将LinearLayout更改为另一个带有Imageview的FrameLayout,其中带有控件的原始LinearLayout下面的
<FrameLayout
android:id="@+id/GameTaskbar"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_gravity="bottom"
android:visibility="invisible" >
<ImageView
android:id="@+id/bar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/bar_512_2"
android:contentDescription="@string/bar"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Button
android:id="@+id/control_1"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="bottom"
android:layout_margin="1dp"
android:background="@drawable/blind" >
</Button>
<Button
android:id="@+id/control_2"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="bottom"
android:layout_margin="1dp"
android:background="@drawable/blind" >
</Button>
</LinearLayout>
</FrameLayout>
ornay