您的位置:首页 > 其它

ViewPager欢迎界面到引导界面的的实现之一

2016-08-12 18:31 423 查看

ViewPager欢迎界面到引导界面的的实现

打开软件,弹出一个动画,动画结束到引导界面

先来实现欢迎界面动画的实现:

RelativeLayout mRelatineLayout=(RelativeLayout) findViewById(R.id.mRelatineLayout);

//开启动画
AnimationSet set=new AnimationSet(false);
/**
* 旋转动画
*/
RotateAnimation mRotateAnimation=new  RotateAnimation(0, 360,
Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f);
mRotateAnimation.setFillEnabled(true);
mRotateAnimation.setFillAfter(true);
mRotateAnimation.setDuration(1000);

/**
* 透明渐变色
*/
AlphaAnimation mAlphaAnimation=new AlphaAnimation(0, 1.0f);
mAlphaAnimation.setDuration(1000);

/**
* 缩放
*/
ScaleAnimation mScaleAnimation=new ScaleAnimation(0, 1.0f, 0, 1.0f,
Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f);
mScaleAnimation.setDuration(1000);

//添加动画
set.addAnimation(mRotateAnimation);
set.addAnimation(mAlphaAnimation);
set.addAnimation(mScaleAnimation);

/**
* 开启动画
*/
mRelatineLayout.startAnimation(set);
set.setAnimationListener(new AnimationListener() {
//动画开始时执行此方法
@Override
public void onAnimationStart(Animation animation) {

}
//动画重复执行此方法
@Override
public void onAnimationRepeat(Animation animation) {

}
//动画结束执行此方法
@Override
public void onAnimationEnd(Animation animation) {

//第一次安装这款软件在动画结束时跳转到引导界面,第二次打开就没有引导界面了

}
});


引导界面的实现:

引导界面的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/guird_pager"
>
</android.support.v4.view.ViewPager>

<Button
android:id="@+id/btn_start_button"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:text="开始体验"
android:textColor="@color/guird_text_color"
android:visibility="gone"
android:background="@drawable/guird_btn_backgrounp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="40dp"
/>

</RelativeLayout>


引导界面具体类的实现:

public class GuirdActivity extends Activity implements OnPageChangeListener {
private ViewPager mViewPager;
private Button mButton;
private List<ImageView> mList;
private static int items[]={R.drawable.guide_1,R.drawable.guide_2,R.drawable.guide_3};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//取消标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_guird);
mViewPager=(ViewPager) findViewById(R.id.guird_pager);
mButton=(Button) findViewById(R.id.btn_start_button);
initData();
}
/**
* 初始化数据
*/
@SuppressWarnings("deprecation")
private void initData() {
mList = new ArrayList<ImageView>();
for(int i=0;i<items.length;i++){
//新建ImageView
ImageView iv=new ImageView(this);
iv.setImageResource(items[i]);
//填充屏幕
iv.setScaleType(ScaleType.FIT_XY);
mList.add(iv);
}
//给viewpager设置适配器adapter-----list
mViewPager.setAdapter(new GuirdViewPagerAdapter());
//滑动页面改变的监听器
mViewPager.setOnPageChangeListener(this);
}


给viewpager设置适配器adapter—–list

mViewPager.setAdapter(new GuirdViewPagerAdapter());


ViewPager设置的适配器:四个常见的方法

/**
* viewpageer的适配器
* @author Administrator
*
*/
class GuirdViewPagerAdapter extends PagerAdapter{

@Override
public int getCount() {
if(mList!=null){return mList.size();}
return 0;
}

@Override
public boolean isViewFromObject(View view, Object obj) {
return view==obj;

}
/**
* 销毁一个页卡
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//从viewpager中移除imageview
ImageView iv=mList.get(position);
container.removeView(iv);
}
/**
* 实例化一个页卡
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {

ImageView iv=mList.get(position);
//添加到viewpager中container就是viewpager
container.addView(iv);
return iv;
}
}


设置ViewPager页面的选择监听器

mViewPager.setOnPageChangeListener(this);


让类实现接口 OnPageChangeListener 则实现接口里面的方法如下:

//在当滑动状态改变时的回调
@Override
public void onPageScrollStateChanged(int arg0) {

}

//正在滑动的时候回调
//position当前所处的页面
//positionset 百分比
//arg2 滑动时的具体距离
@Override
public void onPageScrolled(int position, float positionoffset, int arg2) {

}

//当viewpager某个页面选中时回调
//@position当前选中的页面
@Override
public void onPageSelected(int position) {
//设置只有滑动到最后一个页面时才显示按钮
mButton.setVisibility((position==mList.size()-1?View.VISIBLE:View.GONE));
}


到这里欢迎界面和引导界面已经完成了,那么是如何实现两个界面之间的连接的呢?

还记得欢迎界面的动画吗,在动画结束时会调用这么一个方法:

//动画结束执行此方法
@Override
public void onAnimationEnd(Animation animation) {

//第一次安装这款软件在动画结束时跳转到引导界面,第二次打开就没有引导界面了

}


而我们就是在这个方法里面实现界面的跳转。

引导页面的静态点怎么实现

//往LinearLayout布局中添加静态点

<LinearLayout
android:id="@+id/ll_guird_point"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp"
android:orientation="horizontal"


在主活动中:

LinearLayout  mLinearLayout=(LinearLayout) findViewById(R.id.ll_guird_point);

//动态添加一个点
View point=new View(this);
point.setBackgroundResource(R.drawable.guird_point_normal);
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(30, 30);
//居中
if(i!=0){//第一个页面不用左边距
params.leftMargin=15;
}
mLinearLayout.addView(point, params);


画出一个点的布局:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">//圆形
//半径
<corners android:radius="5dp"/>
//填充的颜色
<solid  android:color="#cccccc"/>

</shape>


动态点的实现:

在原有的LinearLayout中外围添加一个RelaterLayout,里面添加一个View加载动态的点

<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp" >

<!--  加点的容器 -->
<LinearLayout
android:id="@+id/ll_guird_point"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
</LinearLayout>

<View
android:id="@+id/re_point_selected"
android:layout_width="15dp"
android:layout_height="15dp"
android:background="@drawable/guird_point_selectedl" />
</RelativeLayout>


动态点的颜色选择器

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<corners android:radius="5dp"/>

<solid  android:color="#ff0000"/>

</shape>


在初始化数据之后initData()加上下面几句:

//初始化控件,动态换红点
View  mPointSelect=(View) findViewById(R.id.re_point_selected);

initData();
//计算点于点之间的布局
mPointSelect.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//当整个UI的数布局改变的时候调用
if(mList==null){
return ;
}
//监听一次
mPointSelect.getViewTreeObserver().removeGlobalOnLayoutListener(this);
mSpace = mLinearLayout.getChildAt(1).getLeft()-mLinearLayout.getChildAt(0).getLeft();
}
});


最后在滑动监听调用的方法中:

//正在滑动的时候回调
//position当前所处的页面
//positionset 百分比
//arg2 滑动时的具体距离
@Override
public void onPageScrolled(int position, float positionoffset, int arg2) {
//1、对滑动的做操作

RelativeLayout.LayoutParams params= (android.widget.RelativeLayout.LayoutParams) mPointSelect.getLayoutParams();
//2、设置marginLeft
params.leftMargin=(int) (mSpace*position+mSpace*positionoffset+0.5f);

mPointSelect.setLayoutParams(params);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  viewpager
相关文章推荐