2010-11-22 9 views
2

Quelqu'un peut-il me dire quel est le problème avec cette implémentation? Tout ce que je veux faire ici est d'avoir deux vues qui se chevauchent qui permutent des endroits lorsque vous appuyez sur l'écran. À moins que je ne l'utilise juste mal, View.bringToFront() ne fait rien?Android: échanger deux vues qui se chevauchent

Ci-dessous l'intégralité du code dans mon application. Notez que j'ai ajouté un remplissage à la 'backView' juste pour m'assurer que les deux se chevauchaient réellement. En effet, je pouvais voir les deux sur l'écran. Bien que le fait de cliquer sur la vue du haut déclenche effectivement la méthode onClick, rien ne change visiblement en réponse aux appels à 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; 
} 
} 

et la disposition correspondante:

<?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> 

Peut-être est la mise en page J'utilise? Je ne suis pas sûr ... J'ai aussi essayé FrameLayout et LinearLayout.

+0

J'ai remarqué que l'utilisation de AbsoluteLayout semble me donner les résultats que je veux ... mais cette classe est en fait marquée comme obsolète. Je vais essayer de ne pas demander "Pourquoi diable est-ce déprécié?" et demandez simplement "Y at-il un moyen légitime de faire cela?" – Cruinh

Répondre

1

J'essayerais d'échanger des vues de contenu au lieu de ImageViews. Mettez chaque imageView dans une autre mise en page et il est facile:

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

Il y a quelques éléments que vous pouvez utiliser que faire pour vous. ViewAnimator, ViewFlipper et ViewSwitcher. Vous pouvez définir les animations dont vous avez besoin etc et ils donnent le reste.

Voici un exemple. Compte tenu de votre exemple, est-ce que vous devez appeler invalidate() sur le parent après avoir appelé bringToFront()?

Questions connexes