2010-11-22 10 views
2

この実装で何が問題なのか教えていただけますか?私がここでやりたいのは、画面をタップしたときに場所を入れ替える2つの重なり合うビューがあることだけです。私が間違って使用していない限り、View.bringToFront()は何もしません?Android:2つのオーバーラップビューを交換する

以下は私のアプリのすべてのコードです。 2つが実際に重なっていることを確認するために、 '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

私は、AbsoluteLayoutを使用すると、私に必要な結果が得られているようですが、実際にはそのクラスは廃止予定とマークされています。私は試してみることを躊躇して "何故、なぜそれは非難されていますか?" 「これを行う正当な方法はありますか?」と尋ねるだけです。 – Cruinh

答えて

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; 

}

0

あなたはそれがあなたのためにこれを行うに使用できるコンポーネントがいくつかあります。 ViewAnimator、ViewFlipper、およびViewSwitcher。あなたは必要なアニメーションを設定することができ、残りの部分を手渡す。

ここにその例があります。 http://www.androidpeople.com/android-viewflipper-example/

あなたの例では、bringToFront()を呼び出した後で親に対してinvalidate()を呼び出す必要がありますか?

関連する問題