简单的解决引导页Viewpager卡顿问题

简单的解决引导页Viewpager卡顿问题

前言:最近试着写一个项目,需要加上引导页,用了一下Viewpager发现加载高清图片时滑动卡顿很明显,网上搜了一遍都是千篇一律的写法解决不了我的问题,没办法,只能自己想办法解决,所以就有了下面的方案。

布局文件:一个Viewpager完成

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/guide_viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v4.view.ViewPager>

</LinearLayout>

下面是Java代码

先自定义一个GuideFragment

public class GuideFragment extends Fragment {
    private int imageId;

    public GuideFragment(int imageId) {
        this.imageId = imageId;
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        ImageView imageView = new ImageView(getActivity());
        LinearLayout.LayoutParams LayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        imageView.setImageResource(imageId);
        imageView.setLayoutParams(LayoutParams);
        View view= imageView;
        return view;
    }
}

很简单定义一个Fragment创建一个ImageView设置全屏
为了能重复使用,生成一个构造方法,将图片ID传递过来。

接下来是适配器GuideAdaper,继承自FragmentPagerAdaper

public class GuideAdapter extends FragmentPagerAdapter {

    private List<Fragment> fragments;

    public GuideAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }
}

最基本的写法

最后是主界面GuideActivity

public class GuideActivity extends FragmentActivity implements ViewPager.OnPageChangeListener{
    private ViewPager viewPager;
    private GuideAdapter adapter;
    private List<Fragment> fragments;

    private int[] images = {R.mipmap.guide_image1,R.mipmap.guide_image2,R.mipmap.guide_image3};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_guide);
        init();
    }

    private void init() {
        viewPager = (ViewPager) findViewById(R.id.guide_viewpager);
        fragments = new ArrayList<>();
        for(int i=0;i<images.length;i++){
            GuideFragment guide = new GuideFragment(images[i]);
            fragments.add(guide);
        }
        adapter = new GuideAdapter(getSupportFragmentManager(),fragments);
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(this);
    }
}

ok,代码到此结束,十分简单。
我看了很多网上的方案,基本上都是使用PagerAdapter和三个布局文件,然后定义一个List再从Activity中使用一个for循环,将布局(有些是直接new一个View或者ImageView)add添加到适配器中,最后setadaper就完成了,但是加载高清图片时十分卡顿,下面放两张图,一张是网上普遍写法一张是本文章的写法,看一下Gpu呈现模式分析

首先是本方法的

采用本方法

然后是网上普遍写法

普遍写法

加载的图片同样是480*853
可以看到差别是十分大的

好了文章到此结束,如果有什么错误欢迎指出。

原创文章,转载请告知

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值