2010-11-22 80 views
2

任何人都可以告訴我這個實現有什麼問題嗎?我想在這裏做的是有兩個重疊的視圖,當你點擊屏幕時交換位置。除非我錯誤地使用它,否則View.bringToFront()什麼也不做?Android:交換兩個重疊視圖

以下是我的應用程序中的所有代碼。請注意,我在'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 2010-11-22 01:17:28

回答

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