viewpager实现自动滑动以及手势滑动功能

今天在做项目的时候,有一个viewpgaer展示图片的页面,第一反应是去网上查找,后来看了好多文章,其实也就是那么两三篇文章,其他的都是转载来转载去的,主要就是运用线程来进行无限循环进行实现的操作,个人感觉并不需要运用到线程,尤其是你写了死循环后,线程的回收就是个问题,所以就寻思着自己实现功能好了。
先看效果图吧:
这里写图片描述
实现思路:
在项目里比较重要的两个东西,一个是handler的使用,一个是监听viewpager的触摸事件,具体的思路是设定一个bool值来监听是否触摸viewpager,我们都知道你如果手动滑动,肯定是要触摸的,我们在触摸的时候把isTouch设定为true,这时候我们手动的把handler里面的消息全部清除掉,当action_up的时候,我们在重新向handler里面发送信息,在handler中进行自动滑动的操作,自动滑动的时间间隔是3秒,最后代码如下:

hanlder类

handler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                //自动循环
                if (!isTouch)
                {
                    int item=msg.what;
                    if (item==2)
                    {

                        viewPager.setCurrentItem(item);
                        item=0;
                        handler.sendEmptyMessageDelayed(item, 3000);
                    }else
                    {
                        viewPager.setCurrentItem(item);
                        item++;
                        handler.sendEmptyMessageDelayed(item, 3000);
                    }

                }
            }
        };
        //发送第一个自动更换的信息
        handler.sendEmptyMessageDelayed(1, 3000);

viewp

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用ViewPager实现多个TextView的文字轮播,可以按照以下步骤进行: 1. 准备多个TextView,可以通过代码或布局文件创建。 2. 创建一个适配器(Adapter),将多个TextView作为每个页面的视图。 3. 在适配器中,重写getItemCount()方法,返回TextView的数量。 4. 在适配器中,重写instantiateItem()方法,将TextView添加到ViewPager中。 5. 在适配器中,重写destroyItem()方法,将TextViewViewPager中删除。 6. 在Activity/Fragment中,设置ViewPager的适配器为上一步创建的适配器。 7. 设置ViewPager的滑动动画,例如 setPageTransformer() 方法。 8. 启动一个定时器,每隔一段时间更新ViewPager的当前页面,使其自动轮播。 9. 可以添加一些手势控制,例如滑动ViewPager停止轮播、点击ViewPager跳转到指定页面等。 以下是一个示例代码: ```java public class TextCarouselActivity extends AppCompatActivity { private ViewPager mViewPager; private Timer mTimer; private int mCurrentPage = 0; private static final int INTERVAL_TIME = 3000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_text_carousel); mViewPager = findViewById(R.id.viewPager); mViewPager.setAdapter(new TextCarouselAdapter()); // 设置ViewPager的滑动动画 mViewPager.setPageTransformer(true, new DepthPageTransformer()); // 启动定时器,实现自动轮播 mTimer = new Timer(); mTimer.schedule(new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { mCurrentPage++; if (mCurrentPage >= mViewPager.getAdapter().getCount()) { mCurrentPage = 0; } mViewPager.setCurrentItem(mCurrentPage); } }); } }, INTERVAL_TIME, INTERVAL_TIME); } @Override protected void onDestroy() { super.onDestroy(); mTimer.cancel(); } private class TextCarouselAdapter extends PagerAdapter { private String[] mTexts = {"Text 1", "Text 2", "Text 3", "Text 4"}; @Override public int getCount() { return mTexts.length; } @Override public Object instantiateItem(ViewGroup container, int position) { TextView textView = new TextView(TextCarouselActivity.this); textView.setText(mTexts[position]); textView.setTextSize(30); textView.setGravity(Gravity.CENTER); container.addView(textView); return textView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } } private class DepthPageTransformer implements ViewPager.PageTransformer { private static final float MIN_SCALE = 0.75f; public void transformPage(View view, float position) { int pageWidth = view.getWidth(); if (position < -1) { // [-Infinity,-1) view.setAlpha(0f); } else if (position <= 0) { // [-1,0] view.setAlpha(1f); view.setTranslationX(0f); view.setScaleX(1f); view.setScaleY(1f); } else if (position <= 1) { // (0,1] view.setAlpha(1 - position); view.setTranslationX(pageWidth * -position); float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position)); view.setScaleX(scaleFactor); view.setScaleY(scaleFactor); } else { // (1,+Infinity] view.setAlpha(0f); } } } } ``` 在这个示例中,我们创建了一个包含四个TextView的适配器,然后将其设置为ViewPager的适配器。我们还设置了ViewPager的滑动动画,并启动了一个定时器,每隔三秒钟更新ViewPager的当前页面,使其自动轮播。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值