GuideActivity

本文介绍了一个使用Android支持库创建引导视图活动的例子。通过ViewPager组件展示一系列引导页面,并实现了底部指示器和触摸滑动功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.views.activity.welcome;

import java.util.ArrayList;
import java.util.Locale;
import com.manniu.manniu.R;
import com.utils.Constants;
import com.views.activity.user.Login;
import com.views.activity.welcome.ViewPagerAdapter;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;


public class GuideViewActivity extends Activity implements OnTouchListener{

   // 定义ViewPager适配器
   private ViewPagerAdapter _vpAdapter;
   // 定义ViewPager对象
   //private NoScrollViewPager _viewPager;
   private ViewPager _viewPager;
   // 定义各个界面View对象
   private View view1, view2, view3;
   // 定义底部小点图片
   private ImageView pointImage0, pointImage1, pointImage2;
   // 定义一个ArrayList来存放View
   private ArrayList<View> listViews;
   // 定义开始按钮对象
   private Button _btnStart;

   // 当前的位置索引值
   @SuppressWarnings("unused")
   private int currIndex = 0;
   private TextView tv_skip;
   private RelativeLayout rl1,rl2,rl3;
   private Context context;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      requestWindowFeature(Window.FEATURE_NO_TITLE);
      setContentView(R.layout.guide_main);
      context = this;
      //_preferences = getSharedPreferences("firstLogin", this.MODE_PRIVATE);
      // 触发移动事件的最短距离,如果小于这个距离就不触发移动控件 一般用于ViewPager控制是否翻页
      // touchSlop = ViewConfiguration.get(this).getScaledTouchSlop();
      // 防止按home键之后退回到桌面,再次点击程序重新启动
      if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
         finish();
         return;
      }
      initView();
      initData();
   }

   @Override
   protected void onStop() {
      super.onStop();
   }
   
   @Override
   protected void onDestroy() {
      super.onDestroy();
      try {
         _vpAdapter = null;
         _viewPager = null;
         rl1 = null;
         rl2 = null;
         rl3 = null;
         view1 = null;
         view2 = null;
         view3 = null;
         listViews = null;
      } catch (Exception e) {
      }
   }

   @SuppressLint("HandlerLeak")
   private void initView() {
      // 实例化各个界面的布局对象
      LayoutInflater inflater = LayoutInflater.from(this);
      view1 = inflater.inflate(R.layout.guide_view1, null);
      view2 = inflater.inflate(R.layout.guide_view2, null);
      view3 = inflater.inflate(R.layout.guide_view3, null);
      
      rl1 = (RelativeLayout)view1.findViewById(R.id.rl_guide1);
      rl2 = (RelativeLayout)view2.findViewById(R.id.rl_guide2);
      rl3 = (RelativeLayout)view3.findViewById(R.id.rl_guide3);
      // 实例化开始按钮
      _btnStart = (Button) view3.findViewById(R.id.btn_start);
      
      Locale locale = getResources().getConfiguration().locale;
      String language = locale.getLanguage();
      if (language.endsWith("zh")){
         Constants.language = "zh";
         rl1.setBackgroundResource(R.drawable.guide1);
         rl2.setBackgroundResource(R.drawable.guide2);
         rl3.setBackgroundResource(R.drawable.guide3);
         _btnStart.setBackgroundResource(R.drawable.enter_start);
      }else{
         Constants.language = "en";
         rl1.setBackgroundResource(R.drawable.guide1_en);
         rl2.setBackgroundResource(R.drawable.guide2_en);
         rl3.setBackgroundResource(R.drawable.guide3_en);
         _btnStart.setBackgroundResource(R.drawable.enter_start_en);
      }
      
      view3.setOnTouchListener(this);
      // 实例化ViewPager
      _viewPager = (ViewPager) findViewById(R.id.viewpager);
      listViews = new ArrayList<View>();
      // 实例化ViewPager适配器
      _vpAdapter = new ViewPagerAdapter(listViews);
      // 实例化底部小点图片对象
      pointImage0 = (ImageView) findViewById(R.id.page0);
      pointImage1 = (ImageView) findViewById(R.id.page1);
      pointImage2 = (ImageView) findViewById(R.id.page2);
      
      tv_skip = (TextView) findViewById(R.id.tv_skip);
   }

   private void initData() {
      // 设置监听
      _viewPager.addOnPageChangeListener(new MyOnPageChangeListener());
      // 设置适配器数据
      _viewPager.setAdapter(_vpAdapter);

      // 将要分页显示的View装入数组中
      listViews.add(view1);
      listViews.add(view2);
      listViews.add(view3);

      _vpAdapter.notifyDataSetChanged();
      // 给开始按钮设置监听
      _btnStart.setOnClickListener(new OnClickListener() {
         @Override
         public void onClick(View v) {
            startExperience();
         }
      });
   }

   public class MyOnPageChangeListener implements OnPageChangeListener {
      @Override
      public void onPageSelected(int position) {
         switch (position) {
         case 0:
            pointImage0.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.page_indicator_focused));
            pointImage1.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.page_indicator_unfocused));
            break;
         case 1:
            pointImage1.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.page_indicator_focused));
            pointImage0.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.page_indicator_unfocused));
            pointImage2.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.page_indicator_unfocused));
            break;
         case 2:
            pointImage2.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.page_indicator_focused));
            pointImage1.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.page_indicator_unfocused));
            break;
         }
         currIndex = position;
      }

      @Override
      public void onPageScrollStateChanged(int arg0) {
      }

      @Override
      public void onPageScrolled(int arg0, float arg1, int arg2) {
      }
   }

   private void startExperience() {
      Intent mainIntent = new Intent(GuideViewActivity.this, Login.class);
      GuideViewActivity.this.startActivity(mainIntent);
      GuideViewActivity.this.finish();
   }

   /**
    * 手指按下时的x y坐标
    */
   private int xDown = 0;
   private int yDown = 0;
   /**
    * 手指移动时的x y 坐标
    */
   private int xMove = 0;
   private int yMove = 0;
   // 触发移动事件的最短距离
   private int touchSlop = 5;
   
   
   @Override
   public boolean onTouchEvent(MotionEvent event) {
      return false;
   }
   

   /**
    * 相应按钮点击事件
    */
   @Override
   public boolean onTouch(View v, MotionEvent ev) {
      switch (ev.getAction()) {
      case MotionEvent.ACTION_DOWN:
         xDown = (int) ev.getX();
         yDown = (int) ev.getY();
         break;
      case MotionEvent.ACTION_MOVE:
         xMove = (int) ev.getX();
         yMove = (int) ev.getY();
         int dx = xMove - xDown;
         int dy = yMove - yDown;
         // 判断是否是从右到左的滑动
         if (xMove < xDown && Math.abs(dx) > touchSlop && Math.abs(dy) < touchSlop) {
            startExperience();
            break;
         }
         break;
      }
      return true;
   }

   /**
    * 开启倒计时
    */
   /*private Timer timer;
   public void RunTimer() {
      try {
         if (timer != null) {
            timer.cancel();
            timer = null;
         }
         if(timer == null){
            timer = new java.util.Timer();
         }
         
         timer.schedule(new TimerTask() {
            @Override
            public void run() {
               count--;
               if(count == 6 || count == 4 || count == 2 || count == 0){
                  Message msg = mHandler.obtainMessage();
                  msg.what = count;
                  mHandler.sendMessage(msg);
               }
            }
         }, 10, 1000);
      } catch (Exception e) {
      }
   }
   
   public void stopTimer() {
      try {
         if (timer != null) {
            timer.cancel();
            timer = null;
         }
      } catch (Exception e) {
      }
   }*/

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值