2010-06-11 105 views
4

我有一個ListView。當我在ListView中選擇一個項目時,我希望有一個Subview從右側滑入,這是它在許多應用程序中的方式。Android ListView - 從右側滑動子視圖?

我一直在尋找這個主題的教程,但我正在旋轉我的輪子。也許Android使用的術語不同於「Subview」?

這裏是我落得這樣做:

  1. 爲子視圖

  2. <activity android:name=".SubViewClassName" />添加子視圖類以清單的<application>標籤內

  3. 添加此創建新的類到主類(「lv」是ListView)

    lv.setOnItemClickListener(新OnItemClickListener(){
    公共無效onItemClick(適配器視圖父, 視圖視圖,INT位置,長ID){

     Intent myIntent = new Intent(view.getContext(),SubView.class); 
    
          startActivityForResult(myIntent, 0); 
    
        } 
    

    });

+0

有Android中沒有「子視圖」,至少不會叫這個名字。 – CommonsWare 2010-06-11 16:19:35

+0

你有圖像嗎? – Jorgesys 2010-06-11 16:25:38

+0

什麼?我想單擊ListView上的一個項目,然後根據在原始ListView中選擇哪一行來創建一個新的ListView。 – Chris 2010-06-11 16:28:52

回答

3

最簡單的事情就是你的第二個ListView在一個單獨的Activity。如果用戶啓用了交互活動動畫(這是默認設置),則您的第二個ListView將從右側滑入。

+1

如果您想強制用戶在活動之間進行幻燈片左/右轉換,您還可以使用Activity.overridePendingTransition()覆蓋轉換。 – Zargoon 2013-05-02 16:27:17

3

對於這個工作,你將需要使用一個ViewFlipper

這裏是你如何設置你的main.xml文件:

<?xml version="1.0" encoding="utf-8"?> 
<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/flipper" android:layout_width="fill_parent" 
android:layout_height="fill_parent" android:versionCode="1" android:versionName="1.0"> 
    <include android:id="@+id/first" layout="@layout/home_screen" /> 
    <include android:id="@+id/second" layout="@layout/info_screen" /> 
</ViewFlipper> 

兩個視圖的XML文件是home_screen和info_screen在這種情況下。你可以給他們任何你想要的名字。

在你的代碼,你需要把這個在您的onCreate()方法:

flipper = (ViewFlipper) findViewById(R.id.flipper); 

此外,你需要下面的onCreate()方法,這些方法。

private Animation inFromRightAnimation() { 

    Animation inFromRight = new TranslateAnimation(
      Animation.RELATIVE_TO_PARENT, +1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, 
      Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f 
    ); 
    inFromRight.setDuration(800); 
    inFromRight.setInterpolator(new AccelerateInterpolator()); 
    return inFromRight; 
} 
private Animation outToLeftAnimation() 
{ 
    Animation outtoLeft = new TranslateAnimation(
      Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, -1.0f, 
      Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f 
    ); 
    outtoLeft.setDuration(800); 
    outtoLeft.setInterpolator(new AccelerateInterpolator()); 
    return outtoLeft; 
} 
private Animation inFromLeftAnimation() { 
    Animation inFromLeft = new TranslateAnimation(
      Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, 
      Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f 
    ); 
    inFromLeft.setDuration(800); 
    inFromLeft.setInterpolator(new AccelerateInterpolator()); 
    return inFromLeft; 
} 
private Animation outToRightAnimation() { 
    Animation outtoRight = new TranslateAnimation(
      Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, +1.0f, 
      Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f 
    ); 
    outtoRight.setDuration(800); 
    outtoRight.setInterpolator(new AccelerateInterpolator()); 
    return outtoRight; 
} 

而且當你準備好簡單地使用

flipper.setInAnimation(inFromRightAnimation()); 
flipper.setOutAnimation(outToRightAnimation()); 
flipper.showNext(); 
+0

謝謝...我會嘗試這個並報告回來。 – Chris 2010-06-11 17:33:17

+0

沒問題。運氣好嗎? – Ryan 2010-06-15 20:46:56

+0

這對我很好。謝謝。 – 2013-10-07 18:59:45

1

也許我錯了,但你可以使用本次活動的overridePendingTransition

在您的主要活動:

public void onItemSelected(String id) { 
    Intent myIntent= new Intent(this, MySubActivity.class); 
     myIntent.putExtra("param1", param1); // some parameters 
     startActivityForResult(myIntent, 0); 
} 

或者任何代碼你想要的。最主要的是在你的子活動(和子視圖)就像MySubActivity

protected void onCreate(Bundle savedInstanceState) { 
    ... 
    // autogenerated code and your code here 
    ... 
    this.overridePendingTransition(R.anim.enter_from_right, R.anim.exit_to_left); 
} 

這裏是在res/anim文件夾

enter_from_right.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
     android:fromXDelta="100%" android:toXDelta="0%" 
     android:fromYDelta="0%" android:toYDelta="0%" 
     android:duration="700"/> 
</set> 

exit_to_left.xml

的動畫文件
<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
     android:fromXDelta="0%" android:toXDelta="-100%" 
     android:fromYDelta="0%" android:toYDelta="0%" 
     android:duration="700"/> 
</set> 

希望有幫助。

0

就小型除了瑞安的響應(使用ViewFlipper):

public void onShowRight(View v) { 
    flipper.setInAnimation(inFromRightAnimation()); 
    flipper.setOutAnimation(outToLeftAnimation()); 
    flipper.showNext();   
} 

public void onShowLeft(View v) { 
    flipper.setInAnimation(inFromLeftAnimation()); 
    flipper.setOutAnimation(outToRightAnimation()); 
    flipper.showPrevious();   
}