ViewPage.PageTransformer
を使用し、X座標とY座標を入れ替えて、垂直座標ViewPager
を作成しました。 (私はthis approachを使用します)垂直ViewPager。特定のポイントをスクロールしないようにする
ここで私がしたいのは、特定のポイントでのスクロールを止めることです(最後のビューは画面の高さの65%しか使用しませんが、全幅を望みます)。 通常、この場合はgetPageWidth()
を上書きしますが、私の幅と高さは今混在しているので、私が見ると画面の高さと幅の両方が65%になります。
これをどのように修正する必要がありますか?
ありがとうございました!
MyViewPager.java限り、私はあなたがオーバースクロールをせずに特定のポイントで停止しようとしている理解し
public class MyViewPager extends ViewPager {
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
setPageTransformer(true, new VerticalPageTransformer());
setOverScrollMode(OVER_SCROLL_NEVER);
}
private class VerticalPageTransformer implements ViewPager.PageTransformer {
@Override
public void transformPage(View view, float position) {
if (position < -1) {
view.setAlpha(0);
} else if (position <= 1) {
view.setAlpha(1);
view.setTranslationX(view.getWidth() * -position);
float yPosition = position * view.getHeight();
view.setTranslationY(yPosition);
} else {
view.setAlpha(0);
}
}
}
private MotionEvent swapXY(MotionEvent ev) {
float width = getWidth();
float height = getHeight();
float newX = (ev.getY()/height) * width;
float newY = (ev.getX()/width) * height;
ev.setLocation(newX, newY);
return ev;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return super.onTouchEvent(swapXY(ev));
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev){
boolean intercepted = super.onInterceptTouchEvent(swapXY(ev));
swapXY(ev);
return intercepted;
}
}
MyPagerAdapter.java
public class MyPagerAdapter extends PagerAdapter {
private Context context;
private LayoutInflater layoutInflater;
public MyPagerAdapter(Context context) {
this.context = context;
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return 2;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
if (position == 0) {
View view = layoutInflater.inflate(R.layout.item_profile_picture, container, false);
container.addView(view);
return view;
}
else {
View view = layoutInflater.inflate(R.layout.item_profile_info, container, false);
container.addView(view);
return view;
}
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((FrameLayout) object);
}
@Override
public float getPageWidth(int position) {
if (position == 1) return (0.65f);
return super.getPageWidth(position);
}
}
私はそれをどのように行うのかの例を挙げることができますか? –
setOverScrollMode(OVER_SCROLL_NEVER);これを追加してxmlでアイテムを管理する私はPCにいない – Izvorski
私はオーバースクロールを決してしていないが、 'getPageWidth'をオーバーライドするとビューの幅と高さが変わるのでxmlを変更することはできません@Izvorski –