废话不多说直接贴代码
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; }}这样就可以了
。
新闻热点
疑难解答