2016-02-08 70 views
0

我正試圖實現一項功能,用戶可以從左至右或從右至左滾動圖像。由於Gallery類已被棄用,因此我在ImageView上添加了TouchListener並執行了以下方法來查找觸摸方向,如下所示。我還添加了單選按鈕組,以給出頁面指示符的感覺。使用頁面指示器水平滾動圖像

這是工作和功能,但我不知道我的方法有什麼缺點?任何建議?

public class SwipeListener implements View.OnTouchListener { 
    private int min_distance = 100; 
    private float downX, downY, upX, upY; 
    View v; 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     this.v = v; 
     switch(event.getAction()) { // Check vertical and horizontal touches 
      case MotionEvent.ACTION_DOWN: { 
       downX = event.getX(); 
       downY = event.getY(); 
       return true; 
      } 
      case MotionEvent.ACTION_UP: { 
       upX = event.getX(); 
       upY = event.getY(); 

       float deltaX = downX - upX; 
       float deltaY = downY - upY; 

       //HORIZONTAL SCROLL 
       if (Math.abs(deltaX) > Math.abs(deltaY)) { 
        if (Math.abs(deltaX) > min_distance) { 
         // left or right 
         if (deltaX < 0) { 
          this.onLeftToRightSwipe(); 
          return true; 
         } 
         if (deltaX > 0) { 
          this.onRightToLeftSwipe(); 
          return true; 
         } 
        } else { 
         //not long enough swipe... 
         return false; 
        } 
       } 
     } 
     return false; 
    } 

    public void onLeftToRightSwipe(){ 
     Toast.makeText(v.getContext(),"left to right", 
             Toast.LENGTH_SHORT).show(); 
    } 

    public void onRightToLeftSwipe() { 
     Toast.makeText(v.getContext(),"right to left", 
            Toast.LENGTH_SHORT).show(); 
    } 

    public void onTopToBottomSwipe() { 
     Toast.makeText(v.getContext(),"top to bottom", 
            Toast.LENGTH_SHORT).show(); 
    } 

    public void onBottomToTopSwipe() { 
     Toast.makeText(v.getContext(),"bottom to top", 
            Toast.LENGTH_SHORT).show(); 
    } 
} 

這是圖像視圖底部的單選按鈕。

  <RadioGroup 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal|bottom" 
       android:orientation="horizontal" 
       android:id="@+id/radiogroup"> 

       <RadioButton 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/radioButton0" 
        android:checked="true" /> 

       <RadioButton 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/radioButton1" /> 

       <RadioButton 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/radioButton2" /> 
      </RadioGroup> 

我得到類似的輸出如下。我不知道我的方法的弊端?

enter image description here

+1

ViewPager可能是實現此目標的最佳方法。 –

+0

我的方法有什麼缺點?使用'ViewPager'有什麼好處? ViewPager在場景後面有'touch listener'? – hotspring

+0

[ViewpagerIndicator](https://github.com/JakeWharton/ViewPagerIndicator)將是您的需要。 –

回答

1

您可以使用viewpager。在XML文件中

<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

添加這個和這個在類文件

private ViewPager mPager; 
private PagerAdapter mPagerAdapter; 

在onCreate方法添加此代碼

mPager = (ViewPager) findViewById(R.id.pager); 
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager()); 
mPager.setAdapter(mPagerAdapter); 

而且在主類中添加這個類的子類。

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { 
     public ScreenSlidePagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      switch(position){ 
       case 0: 
        return new ScreenSlidePageFragment(); 
       case 1: 
        return new ScreenSlidePageFragment1(); 
      } 

     } 

     @Override 
     public int getCount() { 
      return NUM_PAGES; 
     } 
    } 
+0

我正在滾動圖像,而不是一個片段。我想知道我的方法的缺點? – hotspring

+0

Viewpager可幫助您保存記錄。您可以輕鬆地在viewpager上獲取當前項目,而在您的方法中,您必須檢查當前項目。 –

+0

我也跟蹤頁面記錄。使用ViewPager有沒有其他優點? – hotspring