2010-06-11 99 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();   
}