Waz*_*_Be 5 android swipe android-viewpager numberpicker
我使用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];
}
}
Run Code Online (Sandbox Code Playgroud)
Fragment布局包含一个NumberPicker:
<NumberPicker
android:id="@+id/numberPicker1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)
小智 2
通过扩展它并实现dispatchTouchEvent来创建自定义ViewPager。
我们开始跟踪触摸(使用屏幕上的像素位置)ACTION_DOWN。当我们看到它是水平滑动时,我们不会调用super.dispatchTouchEvent( event )- 这将执行默认的 onTouch 路由并使 NumberPicker 也消耗水平滑动 - 而是调用onTouchEvent( event )inACTION_MOVE和 in ACTION_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 );
}
Run Code Online (Sandbox Code Playgroud)
}
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |