2012-01-19 27 views
5

ViewFlipper, kaydırma yaparken çalışmıyor. Liste görünümü yerine başka bir görünüm koyarsam, saygısız çalışır. Liste görünümü için eklemem gereken başka kod var mı? Ve görünümü Flipper içindeki kaydırma görünümü de benim için çalışmıyor :( Bu Benim sınıf kodudur benim xml kodViewFlipper Çocuk liste görünümü ile saygısız değil

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

olduğunu. OnTouchEvent hem kaydırma görünümünü yapar ve

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; 
    } 
} 

geçersiz kıl dispatchTouchEvent yerine jest iyi çalışıyor. zaten ge overrided gibi

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

Teşekkürler, onTouchEvent yerine dispatchTouchEvent kullanarak çözümünüz bana yardımcı oldu. – anujprashar

+0

@anujprashar Hoş Geldiniz :) –

+0

Teşekkürler, harika çalışıyor :) – Kutbi

cevap

0

Kaydırma, etkisi yok Ayrıca, bu durumda, el ile kaydırma efekti almanız gerekir.

+0

El ile kaydırma efekti nasıl alınır? Bazı kod koordinatlarını gönderir misin? –

+0

Hayır, örnek veya örnek yok, sadece google ve kesinlikle iyi bir şey alacaksın. – jeet

+0

sharme Ok Çok teşekkür ederim :) –