ViewPager 滑动速度设置,并实现点击按钮滑动
2012-05-30 16:14
239 查看
ViewPager 滑动速度设置,并实现点击按钮滑动
使用过ViewPager的童鞋,都会感觉到设置界面滑动挺简单的。但是有时候却满足不了UI设计的要求。
在用这个ViewPager的时候我遇到两个问题,不知道你们遇到没有。这里做个笔记,总结一下:
第一个问题是,ViewPager在我们滑动放手后,速度和动画的变化率是固定的。
第二个问题的,我们再添加左右按钮后,如点击滑动到前一页面(通过mViewPager.setCurrentItem(viewID, true);),一闪就了,用户感觉不到动画效果。
其实这两个问题的的根源都是一样的。我们能都改变速度和动画的变化率,那么就可以解决了。
还是写个简单的demo,先看效果图:
![](http://my.csdn.net/uploads/201205/30/1338363878_7891.png)
![](http://my.csdn.net/uploads/201205/30/1338364175_8391.png)
右边这张是滑动中的。滑动放手后,动画的变化率设为加速度,也就是先慢后快。这里改变了Interpolator。
每按下向左键,滑动速度会快0.1秒。每按下向右键,滑动速度会慢0.1秒。 所以你不停的按向右键,那么将会变得很慢很慢。
布局main.xml:
ViewPagerDemoActivity类:
FixedSpeedScroller类:
/article/9069766.html
使用过ViewPager的童鞋,都会感觉到设置界面滑动挺简单的。但是有时候却满足不了UI设计的要求。
在用这个ViewPager的时候我遇到两个问题,不知道你们遇到没有。这里做个笔记,总结一下:
第一个问题是,ViewPager在我们滑动放手后,速度和动画的变化率是固定的。
第二个问题的,我们再添加左右按钮后,如点击滑动到前一页面(通过mViewPager.setCurrentItem(viewID, true);),一闪就了,用户感觉不到动画效果。
其实这两个问题的的根源都是一样的。我们能都改变速度和动画的变化率,那么就可以解决了。
还是写个简单的demo,先看效果图:
![](http://my.csdn.net/uploads/201205/30/1338363878_7891.png)
![](http://my.csdn.net/uploads/201205/30/1338364175_8391.png)
右边这张是滑动中的。滑动放手后,动画的变化率设为加速度,也就是先慢后快。这里改变了Interpolator。
每按下向左键,滑动速度会快0.1秒。每按下向右键,滑动速度会慢0.1秒。 所以你不停的按向右键,那么将会变得很慢很慢。
布局main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="fill_parent" android:layout_height="400dip" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="←" android:textSize="25dip" /> <Button android:id="@+id/right" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="100dip" android:text="→" android:textSize="25dip" /> </LinearLayout> </LinearLayout>
ViewPagerDemoActivity类:
package blog.csdn.net.liyulei316686082; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.AccelerateInterpolator; import android.widget.Button; public class ViewPagerDemoActivity extends Activity { /** Called when the activity is first created. */ private ViewPager mViewPager = null; private Button mLeft = null; private Button mRight = null; private static final int PAGER_NUM = 10;//10个页面 private int mCurrentViewID = 0; //当前页面 private int mMyDuration = 100; //持续时间 private FixedSpeedScroller mScroller; private YLeiPageAdapter mYLeiPageAdapter = null; private List<View> mListViews; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mViewPager = (ViewPager)findViewById(R.id.viewpager); mLeft = (Button)findViewById(R.id.left); mRight = (Button)findViewById(R.id.right); mLeft.setOnClickListener(mOnClickListener); mRight.setOnClickListener(mOnClickListener); mListViews = new ArrayList<View>(); for(int i= 1; i<= PAGER_NUM; i++){ MyPagerView view = new MyPagerView(this, i); mListViews.add(view); } mYLeiPageAdapter = new YLeiPageAdapter(this, mListViews); mViewPager.setAdapter(mYLeiPageAdapter); mViewPager.setOnPageChangeListener(mOnPageChangeListener); /*<span style="color:#ff0000;">主要代码段</span>*/ try { Field mField = ViewPager.class.getDeclaredField("mScroller"); mField.setAccessible(true); //<span style="color:#ff0000;">设置加速度 ,通过改变FixedSpeedScroller这个类中的mDuration来改变动画时间(如mScroller.setmDuration(mMyDuration);) </span> mScroller = new FixedSpeedScroller(mViewPager.getContext(), new AccelerateInterpolator()); mField.set(mViewPager, mScroller); } catch (Exception e) { e.printStackTrace(); } } private OnClickListener mOnClickListener = new OnClickListener(){ @Override public void onClick(View v) { switch (v.getId()){ case R.id.left: if(mCurrentViewID != 0){ mCurrentViewID--; mViewPager.setCurrentItem(mCurrentViewID, true); } mMyDuration -= 100; mScroller.setmDuration(mMyDuration); break; case R.id.right: if(mCurrentViewID != PAGER_NUM-1){ mCurrentViewID++; mViewPager.setCurrentItem(mCurrentViewID, true); } mMyDuration += 100; mScroller.setmDuration(mMyDuration); break; } }}; private OnPageChangeListener mOnPageChangeListener = new OnPageChangeListener(){ @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageSelected(int currentID) { // TODO Auto-generated method stub mCurrentViewID = currentID; }}; }
FixedSpeedScroller类:
package blog.csdn.net.liyulei316686082; import android.content.Context; import android.view.animation.Interpolator; import android.widget.Scroller; public class FixedSpeedScroller extends Scroller { private int mDuration = 1500; public FixedSpeedScroller(Context context) { super(context); } public FixedSpeedScroller(Context context, Interpolator interpolator) { super(context, interpolator); } @Override public void startScroll(int startX, int startY, int dx, int dy, int duration) { // Ignore received duration, use fixed one instead super.startScroll(startX, startY, dx, dy, mDuration); } @Override public void startScroll(int startX, int startY, int dx, int dy) { // Ignore received duration, use fixed one instead super.startScroll(startX, startY, dx, dy, mDuration); } public void setmDuration(int time){ mDuration = time; } public int getmDuration(){ return mDuration; } }
/article/9069766.html
相关文章推荐
- Android 使用ViewPager和RadioGroup配合Fragment实现标签页,可点击按钮切换、滑动切换。
- 页面滑动返回和点击返回按钮动作实现;
- viewpager的setCurrentItem 底部导航栏点击按钮实现直接跳转,去掉滑动效果
- 设置按钮的滑动动画实现
- js设置按钮一段时间内不能重复点击的实现
- scrolloView点击按钮实现滑动的时候有时候会出现卡顿的现象
- css3实现波纹式动画,点击聚焦时设置内阴影实现按钮点击立体效果
- js实现点击按钮后给Div图层设置随机背景颜色的方法
- 使用jQuery实现鼠标点击左右按钮滑动切换
- JS实现点击按钮滑动
- 实现点击按钮获取和设置edit文本的方法
- 【页面的点击滑动;点击按钮实现多个Frament的切换 ViewPager+RadioButton+Fragment】
- 可以通过左右滑动和点击小按钮来实现图片的轮播
- js 实现标题栏的向左向左滚动,设置两个向左和向右的两个按钮,当点击向左按钮时,标题栏文字向左滚动,点击向右按钮时,标题栏向右滚动。
- js实现点击按钮后给Div图层设置随机背景颜色的方法
- 利用runtime懒人实现iOS 防止按钮连续点击 连续响应事件,可以自己设置时间间隔,拖进工程中立即生效
- jquery实现点击按钮滑动到指定位置
- 使用jquery实现点击一个按钮或连接,让它下面的div显示,在点击一下隐藏
- SWT实现点击菜单项或按钮改变面板内容
- jquery 实现 点击按钮后倒计时效果,多用于实现发送手机验证码、邮箱验证码