2016-11-01 3 views
2

У меня есть viewpager и некоторые кнопки ниже viewpager. Я добавил весь макет внутри scrollview, но из-за viewpager scrollview не работает. Я пробовал множество пользовательских классов scrollview и viewpager, но никто не работал. Есть ли способ сделать это или мне нужно использовать что-то другое вместо viewpager. Я использую viewpager для отображения изображений.Android viewpager внутри scrollview

public class MainActivity extends AppCompatActivity { 


    private ViewPager viewPager; 
    MyPagerAdapter adapter; 
    private ArrayList<String> alName=new ArrayList<String>(); 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     alName.add("http://i.imgur.com/wre2PiR.jpg"); 
     alName.add("http://i.imgur.com/BGGOhh1.jpg"); 
     alName.add("http://i.imgur.com/XGCLH1M.jpg"); 
     alName.add("http://i.imgur.com/kiPwp9I.jpg"); 
     adapter = new MyPagerAdapter(MainActivity.this, alName); 
     viewPager.setAdapter(adapter); 


    } // onCreate ends 

    public class MyPagerAdapter extends PagerAdapter { 

     private Context mContext; 
     private ArrayList<String> arrayList=new ArrayList<String>(); 

     MyPagerAdapter(Context context, ArrayList<String> jarr) { 
      this.mContext = context; 
      this.arrayList=jarr; 
     } 

     @Override 
     public int getCount() { 
      return arrayList.size(); 
     } 

     @Override 
     public boolean isViewFromObject(View view, Object o) { 
      return view == o; 
     } 

     @Override 
     public Object instantiateItem(ViewGroup container, int position) { 
      ImageView view = new ImageView(container.getContext()); 
      view.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      Picasso.with(MainActivity.this).load(arrayList.get(position)).into(view); 
      container.addView(view); 
      return view; 
     } 

     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      container.removeView((View) object); 
     } 

    } 


} 

Layout XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/rootLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fillViewport="true"> 

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

       <android.support.v4.view.ViewPager 
        android:id="@+id/viewpager" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"/> 


      <Button 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="Button 1"/> 

      <Button 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="Button 2"/> 

      <Button 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="Button 3"/> 

      <Button 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="Button 4"/> 

      <Button 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="Button 5"/> 

      <Button 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="Button 6"/> 

      <Button 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="Button 7"/> 

      <Button 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="Button 8"/> 




     </LinearLayout> 

    </ScrollView> 

</LinearLayout> 

ответ

0

Вы можете пользовательские два компонента, чтобы решить эту проблему.

Пользовательские ScrollView:

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 

    switch (ev.getAction()) {  
     case MotionEvent.ACTION_DOWN:  
      xDistance = yDistance = 0f;  
      xLast = ev.getX();  
      yLast = ev.getY();  
      break;  
     case MotionEvent.ACTION_MOVE:  
      final float curX = ev.getX();  
      final float curY = ev.getY();  

      xDistance += Math.abs(curX - xLast);  
      yDistance += Math.abs(curY - yLast);  
      xLast = curX;  
      yLast = curY;  

      if(xDistance > yDistance){  
       return false;  
      }  
    } 

    return super.onInterceptTouchEvent(ev);  
} 

Пользовательские ViewPager:

public boolean dispatchTouchEvent(MotionEvent ev) 
{ 
    boolean ret = super.dispatchTouchEvent(ev); 
    if(ret) 
    { 
    requestDisallowInterceptTouchEvent(true); 
} 
return ret; 
} 
0

В этом случае вы установили вид прокрутки в качестве родительского компоновщика, но если вы хотите, чтобы содержимое внутри пейджера для прокрутки создать фрагмент и установить фрагмент прокрутки для фрагмента и установить фрагмент в адаптер пейджера, хороший пример: google:

Android Developers' Reference

надеюсь, что это поможет

Смежные вопросы