2012-01-19 18 views
5

ViewFlipper non funziona quando si fa scorrere il dito. Se metto qualche altra vista al posto della lista, il flipping funziona bene. C'è qualche altro codice che dovrei aggiungere per un listview? E vista di scorrimento all'interno vista flipper, inoltre, non funziona per me :( Questo è il mio codice XMLViewFlipper non si gira con child listview

<?xml version="1.0" encoding="utf-8"?> 
<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/vf" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <ListView 
      android:id="@+id/list1" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 
    </LinearLayout> 
    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 
     <ListView 
      android:id="@+id/list2" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 
    </LinearLayout> 
</ViewFlipper> 

Questo è il mio codice della classe.

import android.app.Activity; 
import android.os.Bundle; 
import android.view.GestureDetector; 
import android.view.GestureDetector.SimpleOnGestureListener; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 
import android.widget.ViewFlipper; 
import android.widget.AdapterView.OnItemClickListener; 

public class MainActivity extends Activity { 

    private static final int SWIPE_MIN_DISTANCE = 120; 
    private static final int SWIPE_MAX_OFF_PATH = 250; 
    private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
    private GestureDetector gestureDetector; 
    View.OnTouchListener gestureListener; 
    private Animation slideLeftIn; 
    private Animation slideLeftOut; 
    private Animation slideRightIn; 
    private Animation slideRightOut; 
    private ViewFlipper viewFlipper; 
    private ListView lv; 
    private String[] city = { "Indore", "Bhopal", "Khargone", "Ujjain", 
     "Nasik", "Pune", "Delhi", "Mumbai", "Noida", "Hyderabad", 
     "Banglore", "Ajmer", "Goa", "Jaipur", "Nagpur", "" }; 
    private String[] country = { "India", "Bhutan", "Kuwait", "USA", }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_layout); 
     lv = (ListView) findViewById(R.id.List01); 
     ListView lv2 = (ListView) findViewById(R.id.List02); 

     viewFlipper = (ViewFlipper) findViewById(R.id.flipper); 
     slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); 
     slideLeftOut = AnimationUtils 
       .loadAnimation(this, R.anim.slide_left_out); 
     slideRightIn = AnimationUtils 
       .loadAnimation(this, R.anim.slide_right_in); 
     slideRightOut = AnimationUtils.loadAnimation(this, 
       R.anim.slide_right_out); 

     gestureDetector = new GestureDetector(new MyGestureDetector()); 
     gestureListener = new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       if (gestureDetector.onTouchEvent(event)) { 
        return true; 
       } 
       return false; 
      } 
     }; 
     lv.setAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, city)); 
     lv2.setAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, country)); 
     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView arg0, View view, int position, 
        long id) { 
       // user clicked a list item, make it "selected" 
       Toast.makeText(getBaseContext(), "Item Clicked", 
         Toast.LENGTH_SHORT).show(); 
       // selectedAdapter.setSelectedPosition(position); 
      } 
     }); 
     lv2.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView arg0, View view, int position, 
        long id) { 
       // user clicked a list item, make it "selected" 
       Toast.makeText(getBaseContext(), "Item List2 Clicked", 
         Toast.LENGTH_SHORT).show(); 
       // selectedAdapter.setSelectedPosition(position); 
      } 
     }); 
    } 

    class MyGestureDetector extends SimpleOnGestureListener { 
     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
       float velocityY) { 
      try { 
       if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
        return false; 
       // right to left swipe 
       if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE 
         && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
        viewFlipper.setInAnimation(slideLeftIn); 
        viewFlipper.setOutAnimation(slideLeftOut); 
        viewFlipper.showNext(); 
       } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE 
         && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
        viewFlipper.setInAnimation(slideRightIn); 
        viewFlipper.setOutAnimation(slideRightOut); 
        viewFlipper.showPrevious(); 
       } 
      } catch (Exception e) { 
       // nothing 
      } 
      return false; 
     } 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if (gestureDetector.onTouchEvent(event)) 
      return true; 
     else 
      return false; 
    } 
} 

Override dispatchTouchEvent invece di onTouchEvent rende sia vista di scorrimento e bel gesto di lavoro.

@Override 
public boolean dispatchTouchEvent(MotionEvent event) { 
    super.dispatchTouchEvent(event); 
    return gestureDetector.onTouchEvent(event); 
} 
+0

Grazie, la soluzione di usare dispatchTouchEvent invece di onTouchEvent mi ha aiutato. – anujprashar

+0

@anujprashar Prego :) –

+0

Grazie, funziona benissimo :) – Kutbi

risposta

0

Lo scorrimento non è entrata in vigore, come avete già overrided ge quindi, è necessario anche eseguire manualmente l'effetto di scorrimento, nel caso.

+0

Come ottenere manualmente l'effetto di scorrimento? Puoi pubblicare qualche codice eamples? –

+0

no, non ho esempio o campione, sei solo su google e sicuramente otterrai qualcosa di buono. – jeet

+0

sharme Ok grazie mille :) –

Problemi correlati