4

私はリストビューを持っています。ListView でアイテムを選択すると、多くのアプリと同じように、右側からサブビューをスライドさせたいと思います。

このトピックに関するチュートリアルを探していましたが、車輪を回転させています。Android では「サブビュー」とは異なる用語を使用している可能性があります。

これが私がやったことです:

  1. サブビューの新しいクラスを作成する

  2. タグ<activity android:name=".SubViewClassName" />内でSubview クラスをマニフェストに追加します<application>

  3. これをメイン クラスに追加します (「lv」は ListView です)。

    lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView 親、ビュー ビュー、int 位置、長い ID) {

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

    });

4

4 に答える 4

3

最も簡単な方法は、2 番目ListViewを別の に配置することActivityです。ユーザーがインタラクティブ アニメーションを有効にしている場合 (これがデフォルトです)、2 つ目ListViewは右からスライドインします。

于 2010-06-11T16:45:48.687 に答える
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>

この場合、2 つのビューの 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();   
于 2010-06-11T17:12:44.937 に答える
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>

それが役立つことを願っています。

于 2012-10-18T18:19:50.540 に答える
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();         
}
于 2013-10-07T19:01:16.603 に答える