[Android]ScaleViewPager--仿“想去”客户端图片展示效果--中轴旋转ViewPager动画实现
来源:互联网 发布:淘宝上怎么买到苍蝇粉 编辑:程序博客网 时间:2024/05/01 14:58
效果图
实现原理是使用ViewPager加上切换时的动画
下面是一些基础知识的传送门
中轴旋转 http://blog.csdn.net/guolin_blog/article/details/10766017
拖动式动画 http://blog.csdn.net/guolin_blog/article/details/10471245
ViewPager关键代码
设置VewPager后台持有多少个View(一般选择3以上),因为同一个屏幕内需要显示三个View(中间全部加左右View的一部分)
setOffscreenPageLimit();
设置左右View露出的多少
setPageMargin();
Adapter关键代码
设立的paddingLeft与PaddingRight要与上面ViewPager的PageMagin有一定关系,可以自己设置看效果
img.setPadding(paddingLeft, paddingTop, paddingRight,paddingBottom);
ScaleYViewPager源码
package com.usst.csl.viewpagergallery.ui;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.content.res.TypedArray;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;public class ScaleYViewPager extends ViewPager {private int mPgerMargin = -350;private int mPaddingLeft = 130;private int mPaddingRight = 130;private int mPageLimit = 3;private List<Integer> mList;private DefaultViewPagerAdapter mAdapter;private Context mContext;private int mDefaultTopMargin = 16;private int mDefaultBottomMargin = 16;public ScaleYViewPager(Context context) {this(context, null);}public ScaleYViewPager(Context context, AttributeSet attrs) {super(context, attrs);mContext = context;TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.ScaleYViewPager);mPageLimit = a.getInteger(R.styleable.ScaleYViewPager_offscreenPageLimit, mPageLimit);mPgerMargin = a.getInteger(R.styleable.ScaleYViewPager_pagerMargin,mPgerMargin);mPaddingLeft = a.getInteger(R.styleable.ScaleYViewPager_paddingLeft,mPaddingLeft);mPaddingRight = a.getInteger(R.styleable.ScaleYViewPager_paddingRight,mPaddingRight);a.recycle();setOffscreenPageLimit(mPageLimit);setPageMargin(mPgerMargin);setPageTransformer(true, new ScaleYPageTransformer());mList = new ArrayList<Integer>();mList.add(R.drawable.one);mList.add(R.drawable.two);mList.add(R.drawable.three);mList.add(R.drawable.four);mList.add(R.drawable.five);mList.add(R.drawable.six);mAdapter = new DefaultViewPagerAdapter(mList);setAdapter(mAdapter);}/** * set the distance in the center view of the ViewPager * * @param pagerDis */public void setScaleYPagerMargin(int pagerDis) {setPageMargin(mPgerMargin);mAdapter.notifyDataSetChanged();}/** * set the number of view cache,better > 3 * * @param pagerDis */public void setScaleYOffscreenPageLimit(int pagerDis) {if (pagerDis < 3) {throw new IllegalArgumentException("the offscreen page limit must >3");}setOffscreenPageLimit(pagerDis);}/** * add some image resource to the list * * @param list */public void setImgResList(List<Integer> list) {if (list != null && list.size() > 0) {mList.clear();mList.addAll(list);mAdapter.notify();} else {throw new IllegalArgumentException("the list is illegal!");}}/** * default adapter * * @author KC * */private class DefaultViewPagerAdapter extends PagerAdapter {private List<Integer> mList;public DefaultViewPagerAdapter(List<Integer> list) {this.mList = list;}@Overridepublic int getCount() {return mList.size();}@Overridepublic boolean isViewFromObject(View view, Object obj) {return view == obj;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {ImageView img = new ImageView(mContext);img.setImageResource(mList.get(position));img.setPadding(mPaddingLeft, mDefaultTopMargin, mPaddingRight,mDefaultBottomMargin);((ViewPager) container).addView(img, position);return img;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {((ViewPager) container).removeView((ImageView) object);}}}
PageTransformer动画源码
package com.usst.csl.viewpagergallery.ui;import android.support.v4.view.ViewPager.PageTransformer;import android.view.View;public class ScaleYPageTransformer implements PageTransformer {private static final float MIN_SCALE = 0.9f;private static final float MIN_ALPHA = 0.9f;private static final float ROTATION_Y = -30;public void transformPage(View view, float position) {int pageWidth = view.getWidth();int pageHeight = view.getHeight();if (position < -1) { // [-Infinity,-1)// This page is way off-screen to the left.view.setAlpha(0);} else if (position <= 1) { // [-1,1]// Modify the default slide transition to shrink the page as// wellfloat scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));float vertMargin = pageHeight * (1 - scaleFactor) / 2;float horzMargin = pageWidth * (1 - scaleFactor) / 2;if (position < 0) {view.setTranslationX(horzMargin - vertMargin / 2);} else {view.setTranslationX(-horzMargin + vertMargin / 2);}// Scale the page down (between MIN_SCALE and 1)view.setScaleX(scaleFactor);view.setScaleY(scaleFactor);// rotate yview.setRotationY(position * ROTATION_Y);// Fade the page relative to its size.view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE)/ (1 - MIN_SCALE) * (1 - MIN_ALPHA));} else { // (1,+Infinity]// This page is way off-screen to the right.view.setAlpha(0);}}}
在XML中加载
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:scaleyviewpager="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".TestActivity" > <com.usst.csl.viewpagergallery.ui.ScaleYViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" scaleyviewpager:offscreenPageLimit="3" scaleyviewpager:pagerMargin="-350" /></RelativeLayout>
下面是源码地址
https://github.com/ChenSiLiang/ScaleViewPager.git
0 0
- [Android]ScaleViewPager--仿“想去”客户端图片展示效果--中轴旋转ViewPager动画实现
- Android中轴旋转特效实现,制作别样的图片浏览器
- Android中轴旋转特效实现,制作别样的图片浏览器
- Android中轴旋转特效实现,制作别样的图片浏览器
- Android中轴旋转特效实现,制作别样的图片浏览器
- Android中轴旋转特效实现,制作别样的图片浏览器
- Android中轴旋转特效实现,制作别样的图片浏览器
- Android中轴旋转特效实现,制作别样的图片浏览器
- Android中轴旋转特效实现,制作别样的图片浏览器
- Android中轴旋转特效实现,制作别样的图片浏览器
- Android 中轴旋转特效实现,制作别样的图片浏览器
- Android中轴旋转特效实现,几张图片自动切换
- Android中轴旋转特效实现,制作别样的图片浏览器
- Android中轴旋转特效实现,制作别样的图片浏览器
- android 动画rotate实现图片不停旋转的效果
- android实现ViewPager,打开app展示图片
- 仿网易客户端实现顶部导航效果(ViewPager+Fragment)
- Android开发之ViewPager实现多页面切换及动画效果(仿Android的Launcher效果)
- netcfg.hlp 官方版下载
- Hadoop学习笔记(十二)---hadoop配置文件详解
- HTML5实现摇一摇的功能(实测后)
- 使用Java实现串口通信
- MyISAM InnoDB 区别
- [Android]ScaleViewPager--仿“想去”客户端图片展示效果--中轴旋转ViewPager动画实现
- Ehcache配置详解及CacheManager使用
- 老年人要长寿常吃七种食物
- Android-->安装程序(APK)后并启动程序(APP)
- squid缓存设置--控制页面的缓存时间
- Android的Toast介绍-android学习之旅(三十六)
- UITableView_1简单使用
- 新版本eclipse无法安装FatJar插件的问题
- Longest Substring Without Repeating Characters