3

나는 이것에 대한 맞춤 솔루션을 제안하려고 노력했으나 안드로이드 UI에 익숙하지 않다.크기 조정이 가능한 ViewPager 갤러리는 어떻게 디자인합니까?

문제의 응용 프로그램은 여기에서 찾을 수 있습니다 : 아래로 사용자가 스크롤이 갤러리의 크기 (이미지와 함께) 감소 유지로, https://play.google.com/store/apps/details?id=com.expedia.bookings&hl=en

기본적으로하고있는 경우 아래로 충분한 사용자가 스크롤, 갤러리 사라 . 사용자가 상단을 위로 스크롤하면 갤러리 크기가 계속 증가합니다. 사용자가 충분히 위로 스크롤하면 갤러리가 전체 화면을 차지합니다. Research에서는 onScrollChanged 이벤트의 행에있는 것이 유용 할 수 있다고 설명합니다.

누군가 더 많은 경험이있을 수 있습니까?

+0

이 사람이 어떤 생각을 가지고 있습니까을 줄 것이다 onFling 제스처를 처리하기 위해 GestureDetector를 추가하여이 예제를 개선 할 수 있습니까? 질문이 명확하지 않습니까? 충돌. –

+0

코딩을 시도하고 여기에서 공유하십시오. 누군가가 어려움을 겪는다면 문제를 해결하는 방법을 알려줄 것입니다. – Sharath

답변

0

터치 수신기를 호출기에 추가 한 다음 수평 및 수직 이동을 구분해야합니다. 난 당신이

activity_main.xml 찾고있는이 추측

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:gravity="bottom" 
       android:orientation="vertical"> 


    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="300dp" 
     android:background="#8888"> 

    </android.support.v4.view.ViewPager> 
</LinearLayout> 

간단한 호출기 어댑터 PagerAdapter.java

package com.virtoos.tests; 

public class PagerAdapter extends android.support.v4.view.PagerAdapter { 
    private static final int[] WELCOME_IMAGES = new int[] { 
      R.drawable.ic_launcher, 
      R.drawable.ic_launcher, 
      R.drawable.ic_launcher, 
      R.drawable.ic_launcher, 
      R.drawable.ic_launcher 
    }; 

    Context mContext; 
    LayoutInflater mLayoutInflater; 

    public PagerAdapter(Context context){ 
     mContext = context; 
     mLayoutInflater = LayoutInflater.from(context); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup parent, int position){ 
     ImageView imageView = new ImageView(mContext); 
     imageView.setImageResource(WELCOME_IMAGES[position]); 
     ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
       ViewGroup.LayoutParams.MATCH_PARENT); 
     imageView.setLayoutParams(lp); 
     imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); 
     parent.addView(imageView); 
     return imageView; 
    } 

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

    @Override 
    public int getCount(){ 
     return WELCOME_IMAGES.length; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object){ 
     return view.equals(object); 
    } 

} 

터치 핸들러와 마지막 활동 클래스

MainActivity.java

package com.virtoos.tests; 

public class MainActivity extends FragmentActivity { 
    private ViewPager pager; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     pager = (ViewPager)findViewById(R.id.pager); 
     pager.setAdapter(new PagerAdapter(this)); 


     pager.setOnTouchListener(dragTouchListener); 
     ViewConfiguration vc = ViewConfiguration.get(this); 
     slop = vc.getScaledTouchSlop(); 
    } 

    private float downY; 
    private int slop; 
    private VelocityTracker velocityTracker; 
    private boolean isVerticalScroll = false; 
    private View.OnTouchListener dragTouchListener = new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if(event.getAction()==MotionEvent.ACTION_DOWN){ 
       downY = event.getY(); 
       velocityTracker = VelocityTracker.obtain(); 
       velocityTracker.addMovement(event); 
      } else if(event.getAction()==MotionEvent.ACTION_MOVE){ 
       float deltaY = event.getY() - downY; 
       float deltaMode = Math.abs(deltaY); 

       velocityTracker.addMovement(event); 
       velocityTracker.computeCurrentVelocity(1000); 

       float velocityX = Math.abs(velocityTracker.getXVelocity()); 
       float velocityY = Math.abs(velocityTracker.getYVelocity()); 
       if (isVerticalScroll || (deltaMode > slop && velocityY > velocityX)) { 
        //this.getParent().requestDisallowInterceptTouchEvent(true); 
        LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) pager.getLayoutParams(); 
        lp.height = (int) (lp.height-deltaY); 
        pager.setLayoutParams(lp); 
        isVerticalScroll = true; 
       }else { 
        isVerticalScroll = false; 
        return false; 
       } 

      } else if(event.getAction()==MotionEvent.ACTION_UP){ 
       if(!isVerticalScroll) return false; 
       //float deltaY = event.getRawY() - downY; 
       //float deltaMode = Math.abs(deltaY); 
       downY = 0; 
       isVerticalScroll = false; 
       //float velocityY = Math.abs(velocityTracker.getYVelocity()); 
       velocityTracker.recycle(); 
       velocityTracker = null; 
       /*if((velocityY>100 && deltaMode > slop)) { 
        if(*//*pager above half of the screen*//*){ 
         animateOpen(); 
        }else { 
         animateClose(); 
        } 
        mGestureDetector.onTouchEvent(event); 
        return true; 
       }*/ 
      } 
      //return mGestureDetector.onTouchEvent(event); 
      return true; 
     } 
    }; 

} 

당신이 당신에게 더 많은 몰입 제어

관련 문제