g_android 切换功能,android:引导页(viewpager)切换效果

本文章主要讲关于viewpager的切换效果,适用于app引导页:

实现效果图:

4fd3a67f61b748c1f7996751b667d04f.png

a4e41635f86fa08df0b523cb7a3913fc.png

fbe7c07d429067142d396cb7a6facb73.png

c874416e866e8a147b103d2291f7f93a.png

以上是demo的显示效果图。

这里的效果是使用Viewpager提供的一个接口(PageTransformer)实现的,在我们的viwpager有一个对外的方法来设置切换动画(viewpager.setPageTransformer(true, new Transformer()))。

通过这个接口我们可以实现自己定义的动画。

实现步骤:

第一步在布局文件中引用Viewpager控件

android:id="@+id/guid_viewpager"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#fff"

/>

第二步定义自己的PageTransformer

立体效果页面切换的PageTransformer

public class CubeTransformer implements PageTransformer {

@Override

public void transformPage(View view, float position) {

Log.i("result",

"position="+position+" view.id="+view.getId());

if (position <= 0) {

//从右向左滑动为当前View

//设置旋转中心点;

ViewHelper.

setPivotX(view, view.getMeasuredWidth());

ViewHelper.

setPivotY(view, view.getMeasuredHeight() * 0.5f);

//只在Y轴做旋转操作

ViewHelper.setRotationY(view,

90f * position);

} else if (position <=1) {

//从左向右滑动为当前View

ViewHelper.setPivotX(view, 0);

ViewHelper.setPivotY(view, view.getMeasuredHeight() * 0.5f);

ViewHelper.setRotationY(view, 90f * position);

}

}

}

这里的CubeTransformer实现PageTransformer的接口,然后在transformPage方法中操作,方法有两个参数,一个是VIEW(页面的视图),第二个是position(这个是位置,当<0的时候向左滑动,>0时向右滑动)。

这里还有一个类ViewHelper:该类是一个第三方的动画支持库,因为在3.0以下的系统无法使用view的setRotationY等一些方法,所以使用这个动画库来完成。

页面淡入淡出的效果

private static float MIN_SCALE = 0.5f;

@Override

public void transformPage(View view, float position) {

int pageWidth = view.getWidth();

//当视图往左

if (position < -1) {

ViewHelper.setAlpha(view, 0);

ViewHelper.setTranslationX(view, 0);

} else if (position <= 0) {

//使用默认的幻灯片切换时,移动到左边

ViewHelper.setAlpha(view, 1);

ViewHelper.setTranslationX(view, 0);

ViewHelper.setScaleX(view, 1);

ViewHelper.setScaleY(view, 1);

} else if (position <= 1) {

//滑出的页面

ViewHelper.setAlpha(view, 1-position);

//抵消默认的幻灯片过渡

ViewHelper.setTranslationX(view, pageWidth * -position);

float scaleFactor = MIN_SCALE + (1 - MIN_SCALE)

* (1 - Math.abs(position));

ViewHelper.setScaleX(view, scaleFactor);

ViewHelper.setScaleY(view, scaleFactor);

} else {

//本页是屏幕右

ViewHelper.setAlpha(view, 0);

ViewHelper.setScaleX(view, 1);

ViewHelper.setScaleY(view, 1);

}

}

以上的代码是页面淡入淡出的效果,这里主要注意position的处理,其他的参数设置都是通过ViewHelper来设置进去。

页面折叠效果

@Override

public void transformPage(View view, float position) {

if (position < -1) {

ViewHelper.setPivotX(view, view.getMeasuredWidth() * 0.5f);

ViewHelper.setPivotY(view, view.getMeasuredHeight() * 0.5f);

ViewHelper.setScaleX(view, 1);

} else if (position <= 0) {

ViewHelper.setPivotX(view, view.getMeasuredWidth());

ViewHelper.setPivotY(view, 0);

ViewHelper.setScaleX(view, 1 + position);

} else if (position <= 1) {

ViewHelper.setPivotX(view, 0);

ViewHelper.setPivotY(view, 0);

ViewHelper.setScaleX(view, 1 - position);

} else {

ViewHelper.setPivotX(view, view.getMeasuredWidth() * 0.5f);

ViewHelper.setPivotY(view, view.getMeasuredHeight() * 0.5f);

ViewHelper.setScaleX(view, 1);

}

}

页面旋转效果

@Override

public void transformPage(View view, float position) {

if (position < -1) {

} else if (position <= 0) {

ViewHelper.setScaleX(view, 1 + position);

ViewHelper.setScaleY(view, 1 + position);

ViewHelper.setRotation(view, 360 * position);

} else if (position <= 1) {

ViewHelper.setScaleX(view, 1 - position);

ViewHelper.setScaleY(view, 1 - position);

ViewHelper.setRotation(view, 360 * position);

} else {

}

}

ps:

在非第一页与最后一页时,滑动到下一页,position为当前页位置;滑动到上一页:position为当前页-1。

第一页时:滑动到上一页position=0 ,其他基本为0 ;最后一页滑动到下一页 position为当前页位置,其他两个参数为0。

以上是4中效果的PageTransformer。

第三步,在activity中使用

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

guid_viewpager=(ViewPager)findViewById(R.id.guid_viewpager);

getData(mData);

mAdapter = new MyAdapter(mData);

mAdapter.setItemClickLinsener(this);

guid_viewpager.setOffscreenPageLimit(mData.size());

guid_viewpager.setAdapter(mAdapter);

guid_viewpager.setCurrentItem(0);

guid_viewpager.setPageTransformer(true, new CubeTransformer());

}

private void getData(List data) {

data.clear();

for (int i = 0; i < ids.length; i++) {

ImageView image = new ImageView(this);

//为了能够充满屏幕设置图片空间xy充满

image.setScaleType(ScaleType.FIT_XY);

image.setImageResource(ids[i]);

data.add(image);

}

}

页面适配器

public class MyAdapter extends PagerAdapter{

List mList = null;

private OnViewpagerItemClickLinsener ItemClickLinsener;

public MyAdapter(List list) {

mList = list;

}

@Override

public int getCount() {

return mList.size();

}

@Override

public boolean isViewFromObject(View arg0, Object arg1) {

return arg0 == arg1;

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

container.removeView((View)object);

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

View view = mList.get(position);

view.setId(position);

view.setOnClickListener(new OnItemClickListener(position));

container.addView(view);

return view;

}

class OnItemClickListener implements OnClickListener{

private int postion;

public OnItemClickListener(int postion){

this.postion=postion;

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

if(ItemClickLinsener!=null){

ItemClickLinsener.onItemClick(v, postion);

}

}

}

//定义供外面访问的接口,但切换到最后一个页面点击

public interface OnViewpagerItemClickLinsener{

void onItemClick(View v,int postion);

}

public OnViewpagerItemClickLinsener getItemClickLinsener() {

return ItemClickLinsener;

}

public void setItemClickLinsener(OnViewpagerItemClickLinsener itemClickLinsener) {

ItemClickLinsener = itemClickLinsener;

}

}

适配器主要是把页面添加到viewpager里面去,然后在适配器中写一个接口,监听页面的点击事件。

在activity中给viewpager设置adapter即可。

Android控件之ScrollView探究

ScrollView滚动视图是指当拥有很多内容,屏幕显示不完时,需要通过滚动跳来显示的视图。ScrollView只支持垂直滚动。下面为实例:?xmlversion=1.0encoding=utf-8?

关于在Android工程中新添加了一个Activity 而程序崩溃的问题

首先要查看错误日志,看看是不是在AndroidManifest.xml中没有添加activityandroid:name=.Activity的名字android:label=@string/app_name/

Android与设计模式:用单一职责原则为Activity解耦

一、什么是单一职责原则单一职责原则(SRP:Singleresponsibilityprinciple)又称单一功能原则,其定义为:一个类,应该只有一个可以导致变化的原因。光看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值