通用viewpager,不喜,勿喷

来源:互联网 发布:ios破解软件源威锋 编辑:程序博客网 时间:2024/05/14 13:03

判断是否第一次进入,如果第一次则进入引导页面,否则直接竟然主界面。

注意:相对布局不指定位置,元素重叠在左上角

2、具体代码如下:

import java.util.ArrayList;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import cn.banwxf.newsclient.prefutil.PerfUtil;


public class GuideActivity extends Activity {
private ViewPager vPager;
private ArrayList<ImageView> ivlist;// imageview集合
private LinearLayout ll_containt;
private int[] ivarry = { R.drawable.guide_1, R.drawable.guide_2,
R.drawable.guide_3 };// 图片数组
int pointDis;// 小红点移动距离
private ImageView ivredpoint;// 小红点
private Button btn_start;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题,必须在setContentView方法前执行
setContentView(R.layout.activity_guide);
initView();
initData();// 初始化数据
vPager.setAdapter(new MyPagerAdapter());
vPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// 页面选中时
if (position == ivlist.size() - 1) {// 在第三个界面显示开始体验
btn_start.setVisibility(View.VISIBLE);// 显示按钮

} else {
btn_start.setVisibility(View.GONE);// 否则不显示
}
}

@Override
public void onPageScrolled(int position, float positionOffset,// 第二个参数是偏移百分比
int positionOffsetPixels) {
// System.out.println(position+"偏移百分比"+positionOffset);
// 页面滑动过程中
int leftMargin = (int) (pointDis * positionOffset + pointDis
* position);// 计算左边距
// System.out.println(leftMargin);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) ivredpoint
.getLayoutParams();// 获取父布局的布局参数
params.leftMargin = leftMargin;// 修改布局参数
ivredpoint.setLayoutParams(params);// 重新设置布局参数

}


@Override
public void onPageScrollStateChanged(int state) {
// 页面滑动状态改变


}
});
}

private void initView() {
// 初始化控件
ll_containt = (LinearLayout) findViewById(R.id.ll_containt);
vPager = (ViewPager) findViewById(R.id.vp_guide);
ivredpoint = (ImageView) findViewById(R.id.iv_point_red);// 初始化一个红点
btn_start = (Button) findViewById(R.id.btn_start);
btn_start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
PerfUtil.setBooleanPref(getApplicationContext(), "is_first",
false);
Intent i = new Intent(GuideActivity.this, MainActivity.class);
startActivity(i);
finish();
}
});


}


private void initData() {
// 初始化数据
ivlist = new ArrayList<ImageView>();
for (int i = 0; i < ivarry.length; i++) {
ImageView view = new ImageView(this);
view.setBackgroundResource(ivarry[i]);// 把数组中的第i个设置为背景
ivlist.add(view);
ImageView ivpoint = new ImageView(this);
ivpoint.setImageResource(R.drawable.shape_point_gray);// 初始化一个灰点
// 初始化布局参数,宽度包裹内容
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);


if (i > 0) {// 从第二个点开始设置左边距
params.leftMargin = 10;// 设置远点之间的距离
}
ivpoint.setLayoutParams(params);// 设置参数
ll_containt.addView(ivpoint);// 将原点放到布局中
}


// 设置布局绘制完成监听 测量onMeasure-layout布局确定位置-draw绘制
// 圆点移动位置=第二个圆点的left-第一个原点的left
// 监听layout方法结束后,确定位置再去获取圆点的位置
ivredpoint.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ivredpoint.getViewTreeObserver()
.removeGlobalOnLayoutListener(this);
// 获取小红点移动距离
pointDis = ll_containt.getChildAt(1).getLeft()
- ll_containt.getChildAt(0).getLeft();// 第二个小红点减去第一个小红点的左边距
}
});
}


class MyPagerAdapter extends PagerAdapter {


@Override
public int getCount() {
return ivlist.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) {
ImageView view = ivlist.get(position);
container.addView(view);// 添加到容器
return view;
}


}
}

自定义图片选择器如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" android:drawable="@drawable/button_red_pressed"/>
    <item android:drawable="@drawable/button_red_normal"/>
</selector>

自定义颜色选择器如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" android:color="#000"/>
    <item android:color="#fff"/>
</selector>

自定义图标小圆点:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval">
    <solid android:color="#cccccc"/>
    <size android:width="10dp"
        android:height="10dp"/>
</shape>

小红点:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval">
    <solid android:color="#ff0000"/>
    <size android:width="10dp"
        android:height="10dp"/>
</shape>

引导页布局如下:

<?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:orientation="vertical" >
<android.support.v4.view.ViewPager
   android:id="@+id/vp_guide"
   android:layout_width="match_parent"
   android:layout_height="match_parent"/>
    <Button
        android:id="@+id/btn_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="70dp"
        android:visibility="invisible"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:background="@drawable/btn_guide_selector"
        android:textColor="@color/text_guide_selector"
        android:text="开始体验" />
<RelativeLayout
    android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentBottom="true"
       android:layout_centerHorizontal="true"
       android:layout_marginBottom="30dp">
   <LinearLayout
       android:id="@+id/ll_containt"
       android:orientation="horizontal"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
        >
   </LinearLayout>
   <ImageView 
       android:id="@+id/iv_point_red"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:background="@drawable/shape_point_red"
       />
   
    </RelativeLayout>


</RelativeLayout>

0 0
原创粉丝点击