Android:交换两个重叠的视图

时间:2010-11-22 00:56:25

标签: android user-interface

有谁能告诉我这个实现有什么问题?我想在这里做的只有两个重叠的视图,当你点击屏幕时交换位置。除非我只是错误地使用它,否则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。

2 个答案:

答案 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()?