简单的解决引导页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
可以看到差别是十分大的
好了文章到此结束,如果有什么错误欢迎指出。
原创文章,转载请告知