2013-06-13 15 views
6

Bazı verilerle birlikte bazı görüntülere ve liste görünümlerine sahip bir görüntüleyici gösteren bir etkinlik programlamaya çalışıyorum .. ama benim sorunum yalnızca son bölümdeki liste görünümünü kaydırmak olabilir Ben liste görünümü ile viewpager kaydırılabilir yapmak istedim ekran yüzden burada benim XML dosyasınıViewpager'ı listeye bir başlık olarak eklemeViewView

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

<com.devsmart.android.ui.HorizontalListView 
    android:id="@+id/sectionsList" 
    android:layout_width="wrap_content" 
    android:layout_height="25dp" 
    android:background="@drawable/menu_bg" /> 

<include layout="@layout/main_screen_components" /> 

<ListView 
    android:id="@+id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 

var ve benim sınıfta bunu yazmak .. başlık olarak koyarak düşündüm

@Override 
    protected void onPostExecute(List<News> result) { 
     Utils.pagerNews(result); 
     Utils.listNews(result); 

     ImagePagerAdapter pAdapter = new ImagePagerAdapter(
       appManager.getPagerNews()); 
     pager.setAdapter(pAdapter); 

     View headerView = getLayoutInflater().inflate(R.layout.main_screen_components , null , false); 

     NewsListAdapter adapter = new NewsListAdapter(getBaseContext(), 
       appManager.getListNews()); 
     listView.addHeaderView(headerView); 
     listView.setAdapter(adapter); 
     progress.dismiss(); 
    } 

Bu kodu çalıştırdığımda bana bir çoğaltılmış çağrı cihazı verir .. veri ve benim listeview bir üstbilgi olarak boş biriyle sabit .. çağrı cihazı için bir bağdaştırıcıyı ayarlamaya çalıştığımda hangi benim çağrı cihazı dahil hangi kaldırılır .. Herhangi bir fikir ? Böyle sadece viewPager en onTouchListener set

cevap

20

:

viewPager.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
    PointF downP = new PointF(); 
    PointF curP = new PointF(); 
    int act = event.getAction(); 
    if(act == MotionEvent.ACTION_DOWN || act == MotionEvent.ACTION_MOVE || act == MotionEvent.ACTION_UP){ 
     ((ViewGroup) v).requestDisallowInterceptTouchEvent(true); 
     if (downP.x == curP.x && downP.y == curP.y) { 
     return false; 
     } 
    } 
    return false; 
    } 
+0

Sen benim gün kaydedildi! Bu çekicilik gibi çalışır. – Antonio

+0

Benim de günümü kurtardın! Bu harika çalışıyor ~ – daimajia

+0

@eric Bu işlevi anlamada bir sorunla karşı karşıya. Bu işlev, daha az eylemi yanlış döndürür. Ve dowp ve curP yeni başlatıldı ama değerlerinde hiçbir değişiklik yok, bu da dowp ve curP'nin x, y'nin 0 ve her zaman eşit olduğu anlamına gelir. –

0

Kullanım aşağıda özel viewpager sınıfı:

public class CustomViewPager extends ViewPager { 
boolean xScored = false, yScored = false; 

public CustomViewPager(Context context) { 
    super(context); 
} 

public CustomViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    mGestureDetector.onTouchEvent(ev); 
    if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) { 
     xScored = false; 
     yScored = false; 
     requestDisallowInterceptTouchEvent(false); 
    } 
    return super.onTouchEvent(ev); 
} 

GestureDetector.SimpleOnGestureListener mOnGestureListener = new GestureDetector.SimpleOnGestureListener() { 
    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
     if (!yScored && Math.abs(distanceX) > Math.abs(distanceY)) { 
      xScored = true; 
      yScored = false; 
     } 
     if (xScored) { 
      requestDisallowInterceptTouchEvent(true); 
     } else if (!xScored && Math.abs(distanceY) > Math.abs(distanceX)) { 
      xScored = false; 
      yScored = true; 
      requestDisallowInterceptTouchEvent(false); 
     } 
     return true; 
    } 

}; 
GestureDetector mGestureDetector = new GestureDetector(getContext(), mOnGestureListener); 
} 
İlgili konular