您的位置:首页 > 移动开发

Android实现APP欢迎页面 - 自动轮播+页面跳转+判断

2017-08-07 16:14 561 查看

今天来一个ViewPager相关的的小程序:自动轮播+页面跳转+判断是否第一次进入!

(如果是第一次进入则显示欢迎页,否则直接进入到主页)

话不多说,先来张效果图:



要实现这个小程序,先来看一下具体是如何构成的:



那么,接下来就是我们的代码实现步骤了!

首先是我们的布局文件 activity_splash.xml:

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

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

/**
* 这里我们实现一个小小的功能
* 只在第四个页面上显示一个按钮,其他页面设置为隐藏
* 当我们点击按钮时,进行Activity跳转
*/
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="100dp"
android:text="开始体验"
android:visibility="gone"
/>


OK,布局已经创建好了,接下来就是我们最重要的配置文件了,SplashActivity.java文件代码如下:

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;
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.widget.Button;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.RadioGroup;

public class SplashActivity extends Activity {

ViewPager vp;
RadioGroup rg;
Button btn;

LinearLayout ll;
//把小圆点存到集合中
List<ImageView> listDoc;

List<ImageView> list;
int[] imgArray = { R.drawable.guide1, R.drawable.guide2, R.drawable.guide3, R.drawable.ic_launcher };

int count = 0;
Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
count++;
vp.setCurrentItem(count);
sendEmptyMessageDelayed(0, 1000);
};
};

SharedPreferences preferences;
Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);

//当该acitivty启动的时候,先从SharedPreferences中获取登录状态的值,如果为true,那么直接调转到主页
preferences = getSharedPreferences("state", MODE_PRIVATE);
if(preferences.getBoolean("isLogin", false)){
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
finish();
}

//      rg = (RadioGroup) findViewById(R.id.rg);
btn = (Button) findViewById(R.id.btn);

// 1、初始化控件
vp = (ViewPager) findViewById(R.id.vp);
// 2、初始化数据
initData();
// 3、创建apdater对象
MyPagerAdapter adapter = new MyPagerAdapter();
// 4、绑定
vp.setAdapter(adapter);

//添加小圆点的方法
addDoc();

btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
});

handler.sendEmptyMessageDelayed(0, 1000);

vp.setOnPageChangeListener(new OnPageChangeListener() {

@Override
public void onPageSelected(int arg0) {
// 通过vp的选中位置,来确定小圆点的联动
int index = arg0 % list.size();
for (int i = 0; i < imgArray.length; i++) {
if(index == i){
listDoc.get(i).setImageResource(R.drawable.point_selected);
}else{
listDoc.get(i).setImageResource(R.drawable.point_mormal);
}
}
//当index == 3的时候 说明显示的是第四张图片
if(index == imgArray.length - 1){
btn.setVisibility(View.VISIBLE);
}else{
btn.setVisibility(View.GONE);
}
}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub

}

b7d8
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub

}
});
}

/**
* 把小圆点按照导航图片的数量初始化出来
*/
private void addDoc() {
listDoc = new ArrayList<ImageView>();
ll = (LinearLayout) findViewById(R.id.ll);

//根据图片的数量创建小圆点对象
for (int i = 0; i < imgArray.length; i++) {
ImageView iv = new ImageView(SplashActivity.this);
if(i == 0){
iv.setImageResource(R.drawable.point_selected);
}else{
iv.setImageResource(R.drawable.point_mormal);
}
listDoc.add(iv);
ll.addView(iv);
}
}

@Override
protected void onStop() {
//重写stop声明周期方法
//当点击按钮执行页面跳转时,欢迎页会被关闭,那么handler的消息不会随着acitivy的关闭而停止,所以需要手动移除消息
if(handler != null){
handler.removeMessages(0);
}
super.onStop();
}

private void initData() {
list = new ArrayList<ImageView>();
for (int i = 0; i < imgArray.length; i++) {
ImageView iv = new ImageView(SplashActivity.this);
iv.setImageResource(imgArray[i]);
iv.setScaleType(ScaleType.FIT_XY);

list.add(iv);
}
}

class MyPagerAdapter extends PagerAdapter {

@Override
public int getCount() {
return Integer.MAX_VALUE;
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
container.removeView((View) object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
// 因为是无限轮播 所以position参数会一直增长
// 那么我需要对list集合的长度取余数得到一个index下标
int index = position % list.size();
container.addView(list.get(index));
return list.get(index);
}

}

}


到这里,我们的功能就都写好了,不要忘了最重要的一个步骤,就是那我们的AndroidManifest.xml文件中的首页设置成我们刚刚写好的欢迎页;

<activity
android:name="com.example.weektwob.MainActivity"
android:label="@string/app_name" >
</activity>


好了,希望对大家有所帮助,也希望大家多多支持一下 (^_^)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android app viewpager