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

    xiaoxiao2021-03-25  87

    简单的解决引导页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 可以看到差别是十分大的

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

    原创文章,转载请告知

    转载请注明原文地址: https://ju.6miu.com/read-25912.html

    最新回复(0)