2012-06-30 47 views
1

在我的應用程序中,我有一個listView。我有一個ViewFlipper,它是ListView的頭部。viewFlipper和onTouchListener在listView的標題中

我希望ViewFlipper在用戶觸摸並滑動時切換視圖。此外,ViewFlipper的項目是可點擊的。 我的問題是我的ListView也是可滾動的,但是垂直的,可點擊的。

這裏是一個模式:

enter image description here

首先,我試圖使用的onTouchEvent。它不起作用,因爲即使用戶觸摸ViewFlipper的屏幕OUT,也會調用該方法。

現在,如果我使用OuTouchListener,我無法攔截用戶的手勢,我無法弄清楚。

下面是XML代碼的爲ListView的報頭中的樣品:

<ViewFlipper 
    android:id="@+id/flipune" 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    android:layout_weight="3" > 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 

     <ImageButton 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/itemviewflipper1" 
      android:layout_width="wrap_content" 
      android:layout_height="150dp" 
      android:background="@android:color/transparent" 
      android:contentDescription="@string/stritemviewflipper" /> 

     <TextView 
      android:id="@+id/titreviewflipper1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignBottom="@+id/itemviewflipper1" 
      android:background="#AA000000" 
      android:paddingTop="10dip" 
      android:textColor="#ffffffff" 
      android:textSize="12dip" 
      android:textStyle="bold" > 
     </TextView> 
    </RelativeLayout> 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 

     <ImageButton 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/itemviewflipper2" 
      android:layout_width="wrap_content" 
      android:layout_height="150dp" 
      android:background="@android:color/transparent" 
      android:contentDescription="@string/stritemviewflipper" /> 

     <TextView 
      android:id="@+id/titreviewflipper2" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignBottom="@+id/itemviewflipper2" 
      android:background="#AA000000" 
      android:paddingTop="10dip" 
      android:textColor="#ffffffff" 
      android:textStyle="bold" > 
     </TextView> 
    </RelativeLayout> 

     [...] 

</ViewFlipper> 

我在活動定義的OnTouchListener:

viewFlipper.setOnTouchListener(new OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent touchevent) { 
       switch (touchevent.getAction()) { 
       case MotionEvent.ACTION_DOWN: { 
        oldTouchValue = touchevent.getX(); 
        break; 
       } 
       case MotionEvent.ACTION_UP: {   

        float currentX = touchevent.getX(); 
        if (touchevent.getY() < metrics.heightPixels/3) { 
         if (!viewFlipper.isPressed() && oldTouchValue == currentX) { 
          openDescriptionArticle(index); 
         } else { 
          if (oldTouchValue < currentX) { 
           viewFlipper.setInAnimation(AnimationHelper 
             .inFromLeftAnimation()); 
           viewFlipper.setOutAnimation(AnimationHelper 
             .outToRightAnimation()); 
           viewFlipper.showPrevious(); 
           if (index > 0) { 
            index--; 
           } else { 
            index= 4; 
           } 
          } 
          if (oldTouchValue > currentX) { 
           viewFlipper.setInAnimation(AnimationHelper 
             .inFromRightAnimation()); 
           viewFlipper.setOutAnimation(AnimationHelper 
             .outToLeftAnimation()); 
           viewFlipper.showNext(); 
           if (index < 4) { 
            index++; 
           } else { 
            index = 0; 
           } 
          } 
         } 
        } 
        break; 
       } 
       } 
       return false; 
      } 
     }); 
+0

根據您在此處撰寫的內容,您要完成的內容目前尚不清楚。 – FoamyGuy

+0

檢查答案的鏈接http://stackoverflow.com/a/11271615/582571 – rajpara

+0

我檢查了鏈接,但我認爲它不能回答我的問題。事實上,我可以滾動我的listView並滑動我的ViewFlipper,但是當我滾動我的ListView時,ViewFlipper會顯示下一個或前一個項目以及ListView滾動。這兩個操作都可以工作,但我只想要其中的一個(當我滾動ViewFlipper的ListView OUT時,ViewFlipper不應該移動,並且當我滑動ViewFlipper時,ListView也不應該移動)。 – maxetx

回答

0

在我的情況是有HorizontalPager內部ListView標題。 ListView抓住觸摸事件和傳呼機凍結。 我已經通過使用scrollingEnabled選項實現自定義ListView來解決該問題。

public class StoppableListView extends ListView { 
    public boolean scrollingEnabled = true; 
    YourActivity parent; 

    public StoppableListView(Context context) { super(context); parent = (CalendarActivity)context; } 
    public StoppableListView(Context context, AttributeSet attrs) { super(context, attrs); parent = (CalendarActivity)context; } 
    public StoppableListView(Context context, AttributeSet attrs, int defStyle) { super(context,attrs); parent = (CalendarActivity)context; } 


    @Override 
    public boolean dispatchTouchEvent(MotionEvent ev) { 
     if (scrollingEnabled) return super.dispatchTouchEvent(ev); 
     // dispatch touch event to your view 
     else return parent.yourView.dispatchTouchEvent(ev); 
    } 

} 

當尋呼機處於活動狀態時,我設置了listView.scrollingEnabled = false並將事件正確地分配給尋呼機。