Android: обмен двух перекрывающихся видов - PullRequest
2 голосов
/ 22 ноября 2010

Может кто-нибудь сказать мне, что не так с этой реализацией? Все, что я хочу здесь сделать, - это два перекрывающихся вида, которые меняются местами при нажатии на экран. Если только я не использую это неправильно, View.bringToFront () ничего не делает?

Ниже приведен весь код моего приложения. Обратите внимание, что я добавил отступ в 'backView', чтобы убедиться, что они на самом деле перекрываются. Действительно, я мог видеть оба на экране. Несмотря на то, что касание вида сверху действительно вызывает метод onClick, ничто заметно не меняется в ответ на вызовы методаtintFront.

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 ]

1 голос
/ 11 января 2011

Я бы попробовал поменять местами представления контента вместо ImageViews.Поместите каждое изображение в другой макет, и тогда это легко:

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;

}

0 голосов
/ 11 января 2011

Есть пара Компонентов, которые вы можете использовать, которые делают это для вас. ViewAnimator, ViewFlipper и ViewSwitcher. Вы можете установить необходимые анимации и т. Д., А остальное они передадут.

вот один пример. http://www.androidpeople.com/android-viewflipper-example/

Учитывая ваш пример, нужно ли вам вызывать invalidate () для родителя после того, как вы вызвали метода takeToFront ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...