有谁能告诉我这个实现有什么问题?我想在这里做的只有两个重叠的视图,当你点击屏幕时交换位置。除非我只是错误地使用它,否则View.bringToFront()什么都不做?
以下是我的应用中的所有代码。请注意,我在'backView'中添加了填充,以确保两者实际重叠。的确,我可以在屏幕上看到两者。虽然点击顶视图确实触发了onClick方法,但是响应对bringToFront的调用没有任何明显的变化。
public class MainActivity extends Activity implements OnClickListener {
private ImageView frontView;
private ImageView backView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
frontView = (ImageView) findViewById(com.example.R.id.FrontView);
backView = (ImageView) findViewById(com.example.R.id.BackView);
frontView.setOnClickListener(this);
backView.setOnClickListener(this);
backView.setPadding(10,0,0,0);
}
private boolean flag;
public void onClick(View v) {
if (!flag) {
backView.bringToFront();
}
else {
frontView.bringToFront();
}
flag = !flag;
}
}
和相应的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/FrontView"
android:src="@drawable/front"
/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/BackView"
android:src="@drawable/back"
/>
</RelativeLayout>
也许这是我正在使用的布局?我不确定......我也尝试过FrameLayout和LinearLayout。
答案 0 :(得分:1)
我会尝试交换内容视图而不是ImageViews。 将每个imageView放在不同的布局中,然后很容易:
public void onClick(View v) {
if (!flag) {
setContentView(R.layout.main_front);
frontView = (ImageView) findViewById(com.example.R.id.FrontView);
frontView.setOnClickListener(this);
}
else {
setContentView(R.layout.main_back);
backView = (ImageView) findViewById(com.example.R.id.BackView);
backView.setOnClickListener(this);
}
flag = !flag;
}
答案 1 :(得分:0)
您可以使用几个可以为您执行此操作的组件。 ViewAnimator,ViewFlipper和ViewSwitcher。你可以设置你需要的动画等,然后他们交出剩下的动画。
这是一个例子。 http://www.androidpeople.com/android-viewflipper-example/
根据你的例子,你在调用了bringToFront()之后是否必须在父代上调用invalidate()?