为什么ViewPager很慢

4ma*_*oud 4 java xml android

我正在使用ViewPager在多个图像之间滑动,但是在图像之间滑动是缓慢而且不平滑,尽管我只加载了少量图像.这是我的完整代码

MainActivity.java

public class MainActivity extends ActionBarActivity implements ActionBar.TabListener {

public static SectionsPagerAdapter mSectionsPagerAdapter;
public static ViewPager mViewPager;


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

mSectionsPagerAdapter = new   SectionsPagerAdapter(getSupportFragmentManager());

mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);

}

public class SectionsPagerAdapter extends FragmentPagerAdapter {


public SectionsPagerAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int position) {

    Fragment fragment = null;
    Bundle args = new Bundle();

    fragment = new Page();
    args.putString(Page.ARG_SECTION_NUMBER, position);
    fragment.setArguments(args);

    return fragment;

}

public int getItemPosition(Object object) {
    Log.v("MBG", "getItemPosition");
    return POSITION_NONE;
}

@Override
public int getCount() {
    return 6;
}

}
Run Code Online (Sandbox Code Playgroud)

Page.java

public class Page extends Fragment {


public static final String ARG_SECTION_NUMBER = "section_number";
public Page() {
}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {

View rootView = inflater.inflate(R.layout.activity_page, container, false);
String index = getArguments().getString(ARG_SECTION_NUMBER);

ImageView callImage = (ImageView) rootView.findViewById(R.id.imageView);

int resID = getActivity().getResources().getIdentifier(index, "drawable",  getActivity().getPackageName());

callImage.setImageResource(resID);

return rootView;

}
Run Code Online (Sandbox Code Playgroud)

MainActivity.xml

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
 >

    <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/pager"
        android:layout_marginTop="0dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".Prayers"


        />


</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

Page.xml

<RelativeLayout 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"
tools:context="com.mahmoud.qaloun.Page">

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/imageView"
    android:src="@drawable/a1"
    android:scaleType="fitXY"
    />

    </RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

但是当我改变这行代码时

int resID = getActivity().getResources().getIdentifier(index, "drawable",  getActivity().getPackageName());
Run Code Online (Sandbox Code Playgroud)

对此:

int resID = getActivity().getResources().getIdentifier("1", "drawable",  getActivity().getPackageName());
Run Code Online (Sandbox Code Playgroud)

它工作正常,"1"是存储在资源文件夹"1.jpg"中的图像

Dav*_*idH 9

mViewPager.setOffscreenPageLimit(5);
Run Code Online (Sandbox Code Playgroud)

mViewPager.setAdapter();

替换5为屏幕外的页数,即总页数减1.

这会让你ViewPager顺利.

ViewPager没有这个原因的原因很简单,任何屏幕外的页面都会被破坏并在每次切换到该页面时重新创建.如果你有时间在你耗费代码FragmentonActivityCreated(),他们会在每次页面切换上执行.如果将屏幕外页面限制设置为右,则每次切换页面时都不会重新创建片段.