1.佈局
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:background="#FFFFFF" android:clipChildren="false" android:gravity="center_horizontal" android:layerType="software" android:orientation="vertical"> <android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="300dp" android:layout_height="220dp" android:layout_gravity="center" android:clipChildren="false"> </android.support.v4.view.ViewPager> </LinearLayout>2.代碼
MainActivity
import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.ViewGroup; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private ViewPager vp; List<Integer> list = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); vp = (ViewPager) findViewById(R.id.vp); vp.setOffscreenPageLimit(3); int pagerWidth = (int) (getResources().getDisplayMetrics().widthPixels * 3.0f / 5.0f); ViewGroup.LayoutParams lp = vp.getLayoutParams(); if (lp == null) { lp = new ViewGroup.LayoutParams(pagerWidth, ViewGroup.LayoutParams.MATCH_PARENT); } else { lp.width = pagerWidth; } list.add(R.mipmap.a); list.add(R.mipmap.b); list.add(R.mipmap.c); list.add(R.mipmap.d); vp.setLayoutParams(lp); //setPageMargin表示設置圖片之間的間距 vp.setPageMargin(getResources().getDimensionPixelSize(R.dimen.activity_horizontal_margin)); vp.setPageTransformer(true, new MyGallyPageTransformer()); vp.setAdapter(new MyViewpagerAdapter(list, MainActivity.this)); vp.setCurrentItem(2000); } }
MyGallyPageTransformer
public class MyGallyPageTransformer implements ViewPager.PageTransformer { private static final float min_scale = 0.85f; @Override public void transformPage(View page, float position) { float scaleFactor = Math.max(min_scale, 1 - Math.abs(position)); if (position < -1) { page.setScaleX(scaleFactor); page.setScaleY(scaleFactor); } else if (position < 0) { page.setScaleX(scaleFactor); page.setScaleY(scaleFactor); } else if (position >= 0 && position < 1) { page.setScaleX(scaleFactor); page.setScaleY(scaleFactor); } else if (position >= 1) { page.setScaleX(scaleFactor); page.setScaleY(scaleFactor); } } }MyViewpagerAdapter
import android.content.Context; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import java.util.List; public class MyViewpagerAdapter extends PagerAdapter { private List<Integer> list; private Context context; private int xinWidth; private int xinHeight; public MyViewpagerAdapter(List<Integer> list, Context context) { this.context = context; this.list = list; } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView vp_iv = new ImageView(context); vp_iv.setImageResource(list.get(position%list.size())); container.addView(vp_iv); return vp_iv; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }