您的位置:首页 > 其它

viewpager 滑动,缩放,子控件偏移引导页

2016-02-29 17:55 375 查看
viewpager主要利用了接口PageTransformer

效果如下图:









左右滑动的时候,子控件也跟着滑动,并且页面有一点的缩放,最大不超过90%。。

1.MainActivity继承FragmentActivity:

public class MainActivity extends FragmentActivity {

private ViewPager viewPager;
private int[] layouts = { R.layout.guide_one, R.layout.guide_two,R.layout.guide_three,R.layout.guide_four};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);

viewPager = (ViewPager) findViewById(R.id.vps);

MyAdapter adapter = new MyAdapter(getSupportFragmentManager());

//页面滑动器,PageTransformer
viewPager.setPageTransformer(true, new TranslatePageTransformer());

viewPager.setAdapter(adapter);
}

class MyAdapter extends FragmentStatePagerAdapter {

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

@Override
public Fragment getItem(int position) {
Fragment f = new TranslateFragment();
Bundle bundle = new Bundle();

bundle.putInt("layoutId", layouts[position]);

f.setArguments(bundle);
return f;
}

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

}

}


2.TranslateFragment

public class TranslateFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {

int layoutId=getArguments().getInt("layoutId");
View v=View.inflate(getActivity(), layoutId, null);

return v;
}

}


3.TranslatePageTransformer类实现PageTransformer接口:

public class TranslatePageTransformer implements PageTransformer {

/**
* 当ViewPager滑动的时候,每一个页面都会回调该方法。
* View: 当前这个页面
* position:代表当前滑动的位置
*/
@SuppressLint("NewApi")
@Override
public void transformPage(View view, float position) {
if(position<1 && position>-1){
//得到当前页面滑动的position,来控制里面的每一个页面子控件加速行驶
//控制子控件在viewpager正常滑动的基础上加一个同方向的偏移量

ViewGroup rl=(ViewGroup)view.findViewById(R.id.rl);

//1.子控件偏移
for(int i=0;i<rl.getChildCount();i++){
View child=rl.getChildAt(i);

//每一个子控件有平移速度不一样,随机数(0-1)
float factor=(float) (Math.random()*2);

if(child.getTag()==null){
child.setTag(factor);
}else{
factor=(Float) child.getTag();
}

//在原来的位置上加一个平移量,position(-1~0~1)
child.setTranslationX(position*factor*child.getWidth());
}

//2.往右滑动:position:0~1.左边:0~-1
//缩放:0~1
//1.往右移动,缩小。2.往左移动,缩小 . 绝对值:abs()
//			view.setScaleX(1-Math.abs(position));
//			view.setScaleY(1-Math.abs(position));

view.setScaleX(Math.max(0.9f,1-Math.abs(position)));
view.setScaleY(Math.max(0.9f, 1-Math.abs(position)));

//3d立体翻转效果
//			//View的旋转,需要设置旋转中心坐标(绕着Y轴旋转)
//			view.setPivotX(position<0f?view.getWidth():0f);
//			view.setPivotY(view.getHeight()*0.5f);
//			view.setRotationY(position*90f);//旋转的角度
////			view.setRotationY(-position*45f);//旋转的角度
//4.折中翻转效果
//				view.setPivotX(view.getWidth()*0.5f);
//			view.setPivotY(view.getHeight()*0.5f);
//			view.setRotationY(-position*90f);//旋转的角度//4.让图片折中翻转
//
}
}

}

问题:Didn't find class "android.view.ViewPager" on path: DexPathList[[zip file "/data/app/com.example.loading_page-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.loading_page-1, /vendor/lib, /system/lib]]

解决:使用v4的viewpager  

<android.support.v4.view.ViewPager
android:id="@+id/vps"
android:layout_width="match_parent"
android:layout_height="match_parent" />


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息