gpt4 book ai didi

android - ViewPager 内的 NumberPicker 会终止水平滑动

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:38 25 4
gpt4 key购买 nike

我已经使用 ViewPager 很长时间了,今天早上,我尝试在 ViewPager 中包含一个 NumberPicker。

我面临的最大问题是,当尝试滑动 viewpager 时,除了 NumberPicker 之外,它在任何地方都有效。

我真的不明白这种行为!

例如 ListView 就可以了,水平滑动由 ViewPager 处理,垂直滑动由 List 处理。我对 NumberPicker 也有同样的期待。 NumberPicket 没有理由处理水平滑动

代码很简单,我贴在这里:

    ViewPager mPager = (ViewPager) findViewById(R.id.pager);
if (mPager != null)
mPager.setAdapter(mAdapter);

()...
class TabsAdapter extends FragmentPagerAdapter {
public TabsAdapter(FragmentManager fm) {
super(fm);
}

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

@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new FragmentAccueil();
case 1:
return new FragmentRecherche();
case 2:
return new FragmentFav();
}
return null;
}

@Override
public CharSequence getPageTitle(int position) {
if (position == 0)
try {
return TITLES[position]+" "+a.getPackageManager().getPackageInfo(
a.getPackageName(), 0).versionName;
} catch (Exception e) {
// TODO Auto-generated catch block
return TITLES[position];
}
else
return TITLES[position];
}
}

并且 Fragment 布局包含一个 NumberPicker:

   <NumberPicker
android:id="@+id/numberPicker1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

最佳答案

通过扩展并实现 dispatchTouchEvent 创建自定义 ViewPager。

我们开始在 ACTION_DOWN 中跟踪触摸(屏幕上的像素位置)。当我们看到它是水平滑动时,我们不会调用 super.dispatchTouchEvent( event ) - 这将执行默认的 onTouch 路由并使 NumberPicker 也消耗水平滑动 - 但调用 onTouchEvent ( event ) 而不是在 ACTION_MOVEACTION_UP 中。

public class MyViewPager extends ViewPager {

private float mLastX;
private float mLastY;
private final int mTouchSlop = ViewConfiguration.get( getContext() ).getScaledTouchSlop();
private float mStartX;

public MyViewPager( Context context ) {
super( context );
}

public MyViewPager( Context context, AttributeSet attrs ) {
super( context, attrs );
}

@Override
public boolean dispatchTouchEvent( MotionEvent event ) {
switch( event.getAction() ) {
case MotionEvent.ACTION_DOWN:
mLastX = event.getX();
mLastY = event.getY();
mStartX = event.getX();
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
onTouchEvent( event );
break;
case MotionEvent.ACTION_MOVE:
float x = event.getX();
float y = event.getY();

float xDelta = x - mLastX;
float xDeltaAbs = Math.abs( xDelta );
float yDeltaAbs = Math.abs( y - mLastY );

float xDeltaTotal = x - mStartX;
if( Math.abs( xDeltaTotal ) > mTouchSlop )
if( xDeltaAbs > yDeltaAbs )
return onTouchEvent( event );
}

return super.dispatchTouchEvent( event );
}

关于android - ViewPager 内的 NumberPicker 会终止水平滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13099139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com