廢話不多說直接貼代碼
1.要在viewpager和父類的xml屬性中設置android:clipChildren="false"
<RelativeLayout android:id="@+id/lockgp_desktop_detail_viewpager_rl" android:layout_width="match_parent" android:layout_height="match_parent" android:clipChildren="false"> <com.flkeyguard.lockgp.widget.ClipViewPager android:id="@+id/lockgp_desktop_detail_viewpager" android:layout_width="200dp" android:layout_height="200dp" android:layout_centerInParent="true" android:clipChildren="false" android:overScrollMode="never" /> </RelativeLayout>2.viewPager = (ClipViewPager) findViewById(R.id.lockgp_desktop_detail_viewpager);lockGpDeskTopDetailAdapter = new LockGpDeskTopDetailAdapter(this,PReviewList,mAsyncImageLoader,handler);viewPager.setAdapter(lockGpDeskTopDetailAdapter);viewPager.setOffscreenPageLimit(previewList.size());viewPager.setPageTransformer(true, new ScaleTransformer());動畫如下public class ScaleTransformer implements ViewPager.PageTransformer { private static final float MIN_SCALE = 0.85f; private static final float MIN_ALPHA = 0.5f; @Override public void transformPage(View page, float position) { if (position < -1 || position > 1) { page.setAlpha(MIN_ALPHA); page.setScaleX(MIN_SCALE); page.setScaleY(MIN_SCALE); } else if (position <= 1) { // [-1,1] float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)); if (position < 0) { float scaleX = 1 + 0.15f * position; Log.d("google_lenve_fb", "transformPage: scaleX:" + scaleX); page.setScaleX(scaleX); page.setScaleY(scaleX); } else { float scaleX = 1 - 0.15f * position; page.setScaleX(scaleX); page.setScaleY(scaleX); } page.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA)); } } }重點:lockGpDeskTopDetailAdapter = new LockGpDeskTopDetailAdapter(this,previewList,mAsyncImageLoader,handler);viewPager.setAdapter(lockGpDeskTopDetailAdapter);數據一點要這樣設置進去,不能用lockGpDeskTopDetailAdapter.setData();然后刷新的方法,不然滑動動畫會失效3.設置左右的viewpager可以點擊,touch首先讓父類也就是viewpager的父類
viewpagerRl.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return viewPager.dispatchTouchEvent(event); } });然后重寫viewpager,我們這邊取名為 ClipViewPagerpublic class ClipViewPager extends ViewPager { public ClipViewPager(Context context) { super(context); } public ClipViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_UP) { View view = viewOfClickOnScreen(ev); if (view != null) { setCurrentItem(indexOfChild(view)); } } return super.dispatchTouchEvent(ev); } /** * @param ev * @return */ private View viewOfClickOnScreen(MotionEvent ev) { int childCount = getChildCount(); int[] location = new int[2]; for (int i = 0; i < childCount; i++) { View v = getChildAt(i); v.getLocationOnScreen(location); int minX = location[0]; int minY = getTop(); int maxX = location[0] + v.getWidth(); int maxY = getBottom(); float x = ev.getX(); float y = ev.getY(); if ((x > minX && x < maxX) && (y > minY && y < maxY)) { return v; } } return null; }}這樣就可以了
。
新聞熱點
疑難解答