标签:
欢迎页使用的是viewpager,需要适配器。
注意点:
1、判断是否是第一次进入这个app。
2、欢迎页小圆点的逻辑。
实现原理:
首先在activity_welcome放入viewpager和固定四个小圆点的图片在下方。
viewpager用于存放多张欢迎页的图。
welcome_selectoer用于当在哪一页对应的小圆点为灰色状态。即设置成不可点时状态为灰色。
viewpager的内容为静态加载进去。
如图:
直接贴代码,代码都有注释:
WelcomeActivity.java
package com.app.note.activity; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.Display; import android.view.View; import com.app.note.R; import com.app.note.adapter.WelcomeAdapter; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.Window; import android.view.WindowManager; import android.view.animation.Animation; import android.view.animation.ScaleAnimation; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import java.util.ArrayList; import java.util.List; import java.util.logging.Handler; public class WelcomeActivity extends Activity implements OnPageChangeListener,View.OnClickListener { private ViewPager viewPager; private List<View> viewList; private View view1, view2, view3, view4; private ImageView points[];//存放小圆圈数组 private int currentIndex=0;//当前页面,默认首页 private Button startButton; private Boolean isFirstIn = false; private SharedPreferences pref; private ImageView doge; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //将图片设置为全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //隐藏标题栏 this.requestWindowFeature(Window.FEATURE_NO_TITLE); //判断是否第一次使用app //第一个参数是文件名,第二参数是操作模式 /* Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。 Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。 MODE_WORLD_READABLE:表示当前文件可以被其他应用读取; MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。*/ pref = getApplicationContext().getSharedPreferences("FirstOrNo", 0 ); isFirstIn = pref.getBoolean("isFirstIn",true); if(isFirstIn) { setContentView(R.layout.activity_welcome); initViewPager();//初始化ViewPager对象 initPoint();//初始化导航小圆点 changefirst(); }else { Intent intent = new Intent(WelcomeActivity.this, LoginActivity.class); startActivity(intent); finish(); }} private void changefirst(){ pref = getApplicationContext().getSharedPreferences("FirstOrNo",0); SharedPreferences.Editor editor = pref.edit(); editor.putBoolean("isFirstIn", false); editor.commit(); } private void initPoint() { LinearLayout linearLayout=(LinearLayout) findViewById(R.id.ll); points=new ImageView[4]; for(int i=0;i<points.length;i++){ points[i]=(ImageView) linearLayout.getChildAt(i);//遍历LinearLayout下的所有ImageView子节点 points[i].setEnabled(true);//设置当前状态为允许(可点,灰色) //设置点击监听 points[i].setOnClickListener(this); //额外设置一个标识符,以便点击小圆点时跳转对应页面 points[i].setTag(i);//标识符与圆点顺序一致 } currentIndex=0; points[currentIndex].setEnabled(false);//设置首页为当前页(小点着色,蓝色) startButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(WelcomeActivity.this,LoginActivity.class); startActivity(intent); finish(); } }); } private void initViewPager() { viewPager=(ViewPager) findViewById(R.id.viewpager);//取得ViewPager实例 viewList=new ArrayList<View>();//实例化list集合 startButton=(Button)findViewById(R.id.startbutton); //用xml静态添加view view1=View.inflate(WelcomeActivity.this, R.layout.view1, null); view2=View.inflate(WelcomeActivity.this, R.layout.view2, null); view3=View.inflate(WelcomeActivity.this, R.layout.view3, null); view4=View.inflate(WelcomeActivity.this, R.layout.view4, null); viewList.add(view1); viewList.add(view2); viewList.add(view3); viewList.add(view4); //设置适配器 WelcomeAdapter adapter=new WelcomeAdapter(viewList); //绑定适配器 viewPager.setAdapter(adapter); //设置页卡切换监听 viewPager.setOnPageChangeListener(this); } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int position ) {//当前页卡被选择时,position为当前页数 //当滑动到最后一页时隐藏点 if(position==3){ for (int i=0;i<=position;i++) { points[i].setVisibility(View.GONE); } startButton.setEnabled(true); startButton.setVisibility(View.VISIBLE); } //当从最后一页往回滑的时候把点显示出来 if(currentIndex==3){ for (int i=0;i<=currentIndex;i++) { points[i].setVisibility(View.VISIBLE); } startButton.setEnabled(false); startButton.setVisibility(View.GONE); } points[position].setEnabled(false);//不可点 points[currentIndex].setEnabled(true);//恢复之前页面状态 currentIndex=position; } @Override public void onClick(View v) { viewPager.setCurrentItem((int) v.getTag()); } }
适配器WelcomeAdapter.java
package com.app.note.adapter; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import java.util.List; /** * Created by hxdn on 2015/12/29. */ public class WelcomeAdapter extends PagerAdapter { private List<View> list; public WelcomeAdapter(List<View> list) {// 利用构造器接收list集合参数 this.list = list; } @Override public int getCount() {// 返回页卡数量 if (list.size() != 0) { return list.size(); } return 0; } @Override public boolean isViewFromObject(View arg0, Object arg1) {//判断是否为view对象 return arg0==arg1;//官方demo给出的建议写法 } @Override public Object instantiateItem(ViewGroup container, int position) {//实例化一个页卡,view对象存放在ViewGroup里 container.addView(list.get(position)); return list.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) {//销毁一个页卡 container.removeView(list.get(position)); } }
布局代码:activity_welcome.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.app.note.activity.WelcomeActivity"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <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="20dp" android:orientation="horizontal" > <ImageView android:id="@+id/iv1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:clickable="true" android:padding="25dp" android:src="@drawable/welcome_selector" /> <ImageView android:id="@+id/iv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:clickable="true" android:padding="25dp" android:src="@drawable/welcome_selector" /> <ImageView android:id="@+id/iv3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:clickable="true" android:padding="25dp" android:src="@drawable/welcome_selector" /> <ImageView android:id="@+id/iv4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:clickable="true" android:padding="25dp" android:src="@drawable/welcome_selector" /> </LinearLayout> <Button android:id="@+id/startbutton" android:layout_width="160dp" android:layout_height="50dp" android:text="点击进入" android:textSize="20dp" android:textColor="@drawable/button_text" style="@style/btn_login" android:background="@drawable/bg_login_btn_qq" android:visibility="gone" android:clickable="false" android:layout_above="@+id/ll" android:layout_centerHorizontal="true" /> </RelativeLayout>
四个页面由于都差不多只贴其中一份xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/iv1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:clickable="true" android:src="@drawable/welcome1" android:scaleType="fitXY"/> </LinearLayout>
最重要的选择器的xml:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:drawable="@drawable/v_point_pre" ></item> <item android:state_enabled="false" android:drawable="@drawable/v_point_gray" ></item> </selector>
标签:
原文地址:http://www.cnblogs.com/hsshy/p/5171544.html