黑马北京新闻项目连载(1)---引导界面

2024-08-31 23:38

本文主要是介绍黑马北京新闻项目连载(1)---引导界面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

看引导界面效果


先看欢迎界面的布局(动画效果)


activity_welcome.xml

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="match_parent"  
  3.     android:layout_height="match_parent"  
  4.     android:id="@+id/rl_root"  
  5.     android:background="@drawable/splash_bg_newyear" >  
  6.   
  7.     <ImageView  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="match_parent"  
  10.         android:src="@drawable/splash_horse_newyear" />  
  11.   
  12. </RelativeLayout>  


再看欢迎界面的activity

WelcomeActivity.java

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.example.bjnews.activity;  
  2.   
  3. import com.example.bjnews.R;  
  4. import com.example.bjnews.util.SPUtil;  
  5.   
  6. import android.os.Bundle;  
  7. import android.util.Log;  
  8. import android.view.animation.AlphaAnimation;  
  9. import android.view.animation.Animation;  
  10. import android.view.animation.Animation.AnimationListener;  
  11. import android.view.animation.AnimationSet;  
  12. import android.view.animation.RotateAnimation;  
  13. import android.view.animation.ScaleAnimation;  
  14. import android.widget.RelativeLayout;  
  15. import android.widget.Toast;  
  16. import android.app.Activity;  
  17. import android.content.Intent;  
  18.   
  19. public class WelcomeActivity extends Activity {  
  20.     private RelativeLayout rl_root;  
  21.       
  22.     @Override  
  23.     protected void onCreate(Bundle savedInstanceState) {  
  24.         super.onCreate(savedInstanceState);  
  25.         setContentView(R.layout.activity_welcome);  
  26.         init();  
  27.     }  
  28.   
  29.     private void init() {  
  30.         rl_root = (RelativeLayout) findViewById(R.id.rl_root);  
  31.         //旋转  
  32.         RotateAnimation rotateAnimation = new RotateAnimation(0360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);  
  33.         rotateAnimation.setDuration(2000);  
  34.         rotateAnimation.setFillAfter(true);  
  35.         //缩放  
  36.         ScaleAnimation scaleAnimation = new ScaleAnimation(0101, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);  
  37.         scaleAnimation.setDuration(2000);  
  38.         scaleAnimation.setFillAfter(true);  
  39.         //透明度  
  40.         AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f, 1.0f);  
  41.         alphaAnimation.setDuration(2000);  
  42.         alphaAnimation.setFillAfter(true);  
  43.         //添加动画  
  44.         AnimationSet animationSet = new AnimationSet(false);  
  45.         animationSet.addAnimation(rotateAnimation);  
  46.         animationSet.addAnimation(scaleAnimation);  
  47.         animationSet.addAnimation(alphaAnimation);  
  48.         rl_root.startAnimation(animationSet);  
  49.           
  50.         //动画监听事件  
  51.         animationSet.setAnimationListener(new MyAnimation());  
  52.     }  
  53.     class MyAnimation implements AnimationListener{  
  54.   
  55.         @Override  
  56.         public void onAnimationEnd(Animation animation) {  
  57.             //是否已经进入过主界面(默认没有进入过)  
  58.             boolean isEnterMain = SPUtil.getInstance(WelcomeActivity.this).getboolean("isEnterMain"false);  
  59.               
  60.             Log.e("TAG""isEnterMain"+isEnterMain);  
  61.             if (isEnterMain) {  
  62.                 //进入过,进入到主界面  
  63.                 startActivity(new Intent(WelcomeActivity.this,MainActivity.class ));  
  64.                 Log.e("TAG""Main");  
  65.             }else {  
  66.                 //没进入过,计入向导界面  
  67.                 Log.e("TAG""guide");  
  68.                 startActivity(new Intent(WelcomeActivity.this,GuideActivity.class ));  
  69.             }  
  70.             finish();  
  71.         }  
  72.   
  73.         @Override  
  74.         public void onAnimationRepeat(Animation animation) {  
  75.               
  76.         }  
  77.   
  78.         @Override  
  79.         public void onAnimationStart(Animation animation) {  
  80.               
  81.         }  
  82.           
  83.     }  
  84. }  
另外为上对象提供一个工具类(用来保存是否是第一次进入应用)

SPUtil.java

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.example.bjnews.util;  
  2.   
  3. import android.content.Context;  
  4. import android.content.SharedPreferences;  
  5. import android.content.SharedPreferences.Editor;  
  6.   
  7. public class SPUtil {  
  8.     // 构造器私有  
  9.     private SPUtil() {  
  10.     }  
  11.   
  12.     // 私有、静态实例  
  13.     private static SPUtil instance = new SPUtil();  
  14.   
  15.     // 公共、静态方法获取实例  
  16.     public static SPUtil getInstance(Context context) {  
  17.         if (sp == null) {  
  18.             sp = context.getSharedPreferences("atguigu", Context.MODE_PRIVATE);  
  19.         }  
  20.         return instance;  
  21.     }  
  22.   
  23.     private static SharedPreferences sp;  
  24.   
  25.     // 保存数据的方法  
  26.     public void put(String key, Object defValue) {  
  27.           
  28.         Editor edit = sp.edit();  
  29.         if (defValue instanceof Boolean) {  
  30.             edit.putBoolean(key, (Boolean) defValue);  
  31.         }  
  32.         if (defValue instanceof String) {  
  33.             edit.putString(key, (String) defValue);  
  34.         }  
  35.         if (defValue instanceof Integer) {  
  36.             edit.putInt(key, (Integer) defValue);  
  37.         }  
  38.         edit.commit();  
  39.           
  40.     }  
  41.   
  42.     // 获取数据  
  43.     public String getString(String key, String defValue) {  
  44.         return sp.getString(key, defValue);  
  45.     }  
  46.   
  47.     public int getInt(String key, int defValue) {  
  48.         return sp.getInt(key, defValue);  
  49.     }  
  50.   
  51.     public boolean getboolean(String key, boolean defValue) {  
  52.         return sp.getBoolean(key, defValue);  
  53.     }  
  54. }  

接下来开始进行引导界面的操作了 

先看布局

activity_guide.xml

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="match_parent"  
  3.     android:layout_height="match_parent" >  
  4.   
  5.     <android.support.v4.view.ViewPager  
  6.         android:id="@+id/viewpager"  
  7.         android:layout_width="fill_parent"  
  8.         android:layout_height="fill_parent" >  
  9.     </android.support.v4.view.ViewPager>  
  10.   
  11.     <Button  
  12.         android:id="@+id/btn_enterMain"  
  13.         android:layout_width="wrap_content"  
  14.         android:layout_height="wrap_content"  
  15.         android:layout_alignParentBottom="true"  
  16.         android:layout_centerHorizontal="true"  
  17.         android:layout_marginBottom="100dp"  
  18.         android:background="@drawable/enter_main_button_selector_bg"  
  19.         android:text="开始体验"  
  20.         android:textColor="@drawable/enter_main_button_text_selector"  
  21.         android:visibility="gone" />  
  22.   
  23.     <RelativeLayout  
  24.         android:layout_width="wrap_content"  
  25.         android:layout_height="wrap_content"  
  26.         android:layout_alignParentBottom="true"  
  27.         android:layout_centerHorizontal="true"  
  28.         android:layout_marginBottom="80dp" >  
  29.   
  30.         <LinearLayout  
  31.             android:id="@+id/ll_point_group"  
  32.             android:layout_width="wrap_content"  
  33.             android:layout_height="wrap_content"  
  34.             android:orientation="horizontal" >  
  35.         </LinearLayout>  
  36.   
  37.         <View  
  38.             android:id="@+id/red_point"  
  39.             android:layout_width="10dp"  
  40.             android:layout_height="10dp"  
  41.             android:background="@drawable/point_red"/>  
  42.     </RelativeLayout>  
  43.   
  44. </RelativeLayout>  
针对引导界面还需要提供4个xml文件(进入体验button的按下效果切换,以及还有3个状态切换圆点)
enter_main_button_selector_bg.xml

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.     <item android:state_checked="true" android:drawable="@drawable/button_red_pressed"></item>  
  4.     <item android:state_checked="false" android:drawable="@drawable/button_red_normal"></item>  
  5.   
  6. </selector>  

enter_main_button_text_selector.xml

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.     <item android:state_checked="true" android:color="@android:color/black"></item>  
  4.     <item android:state_checked="false" android:color="@android:color/white"></item>  
  5.   
  6. </selector>  

point_normal.xml

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">  
  3.     <solid android:color="#55000000"/>  
  4. </shape>  
point_red.xml

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">  
  3.     <solid android:color="#ff0000"/>  
  4. </shape>  

接下来就该注意的向导界面代码了

GuideActivity.java

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.example.bjnews.activity;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import android.app.Activity;  
  6. import android.content.Intent;  
  7. import android.os.Bundle;  
  8. import android.support.v4.view.PagerAdapter;  
  9.   
  10. import android.support.v4.view.ViewPager;  
  11. import android.support.v4.view.ViewPager.OnPageChangeListener;  
  12. import android.view.View;  
  13. import android.view.ViewGroup;  
  14. import android.view.ViewTreeObserver.OnGlobalLayoutListener;  
  15. import android.widget.Button;  
  16. import android.widget.ImageView;  
  17. import android.widget.LinearLayout;  
  18. import android.widget.LinearLayout.LayoutParams;  
  19. import android.widget.RelativeLayout;  
  20.   
  21. import com.example.bjnews.R;  
  22. import com.example.bjnews.util.SPUtil;  
  23.   
  24. public class GuideActivity extends Activity {  
  25.     private ViewPager viewpager;// 三个滑动的页面  
  26.     private ArrayList<ImageView> imageViews;// 三个滑动页面对应的图片集合  
  27.     private Button btn_enterMain;// 开始体验按钮  
  28.   
  29.     private LinearLayout ll_point_group;// 下方的三个显示圆点为  
  30.     private View red_point;// 当前页面的高亮显示圆点  
  31.   
  32.     private int leftMax;// 2个原点之前的距离  
  33.   
  34.     @Override  
  35.     protected void onCreate(Bundle savedInstanceState) {  
  36.         super.onCreate(savedInstanceState);  
  37.         setContentView(R.layout.activity_guide);  
  38.         // 获取点的集合  
  39.         ll_point_group = (LinearLayout) findViewById(R.id.ll_point_group);  
  40.         // 获取高亮的红点  
  41.         red_point = findViewById(R.id.red_point);  
  42.         // 获取viewpager  
  43.         viewpager = (ViewPager) findViewById(R.id.viewpager);  
  44.         // 获取button(开始体验)  
  45.         btn_enterMain = (Button) findViewById(R.id.btn_enterMain);  
  46.         // 创建集合  
  47.         imageViews = new ArrayList<ImageView>();  
  48.   
  49.         // 准备数据  
  50.         int[] ids = { R.drawable.guide_1, R.drawable.guide_2,  
  51.                 R.drawable.guide_3 };  
  52.         for (int i = 0; i < ids.length; i++) {  
  53.             ImageView imageView = new ImageView(this);// 创建图片对象  
  54.             imageView.setBackgroundResource(ids[i]);// 为图片设置背景  
  55.             imageViews.add(imageView);// 添加图片  
  56.             View point = new View(this);// 添加下标点-创建点击  
  57.             LayoutParams params = new LayoutParams(1010);// 创建布局参数  
  58.             // 除开第0个点,其他的都要距离左边有10个像素  
  59.             if (i != 0) {  
  60.                 params.leftMargin = 10;  
  61.             }  
  62.   
  63.             point.setBackgroundResource(R.drawable.point_normal);// 添加背景图片  
  64.   
  65.             point.setLayoutParams(params);// 设置布局参数  
  66.   
  67.             ll_point_group.addView(point);// 添加指示点击  
  68.   
  69.         }  
  70.   
  71.         // 设置适配器  
  72.         viewpager.setAdapter(new viewpagerAdapter());  
  73.   
  74.         // 监听当onLayout方法执行的时候再去  
  75.         red_point.getViewTreeObserver().addOnGlobalLayoutListener(  
  76.                 new OnGlobalLayoutListener() {  
  77.                     @Override  
  78.                     public void onGlobalLayout() {  
  79.   
  80.                         // 取消注册监听--因为孩子也会调用  
  81.                         red_point.getViewTreeObserver()  
  82.                                 .removeGlobalOnLayoutListener(this);  
  83.                         // 两点间的间距  
  84.                         leftMax = ll_point_group.getChildAt(1).getLeft()  
  85.                                 - ll_point_group.getChildAt(0).getLeft();  
  86.                     }  
  87.                 });  
  88.   
  89.         /** 
  90.          * 设置页面改变监听 
  91.          */  
  92.         viewpager.setOnPageChangeListener(new OnPageChangeListener() {  
  93.   
  94.             @Override  
  95.             public void onPageSelected(int position) {  
  96.                 //只有第三种页面显示进入按钮  
  97.                 if (position == 2) {  
  98.                     btn_enterMain.setVisibility(View.VISIBLE);  
  99.                 } else {  
  100.                     btn_enterMain.setVisibility(View.GONE);  
  101.                 }  
  102.             }  
  103.   
  104.             /* 
  105.              * 位置 屏幕上滑动的百分比 滑动的显示 
  106.              */  
  107.             @Override  
  108.             public void onPageScrolled(int position, float positionOffset,  
  109.                     int positionOffsetPixels) {  
  110.                 // 计算要滑动的距离=间距*在屏幕上滑动的百分比  
  111.                 int distance = (int) (leftMax * (positionOffset + position));  
  112.                 RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(  
  113.                         1010);  
  114.                 params.leftMargin = distance;  
  115.                 red_point.setLayoutParams(params);  
  116.             }  
  117.   
  118.             @Override  
  119.             public void onPageScrollStateChanged(int arg0) {  
  120.   
  121.             }  
  122.         });  
  123.         /** 
  124.          * 为开始体验button添加点击事件 
  125.          */  
  126.         btn_enterMain.setOnClickListener(new View.OnClickListener() {  
  127.   
  128.             @Override  
  129.             public void onClick(View v) {  
  130.                 // 标记为true  
  131.                 SPUtil.getInstance(GuideActivity.this).put("isEnterMain"true);  
  132.                 // 进入主界面  
  133.                 startActivity(new Intent(GuideActivity.this, MainActivity.class));  
  134.                 // 干掉自己  
  135.                 finish();  
  136.             }  
  137.         });  
  138.     }  
  139.   
  140.     class viewpagerAdapter extends PagerAdapter {  
  141.         @Override  
  142.         public int getCount() {  
  143.             return imageViews.size();  
  144.         }  
  145.   
  146.         @Override  
  147.         public boolean isViewFromObject(View arg0, Object arg1) {  
  148.             return (arg0 == arg1);  
  149.         }  
  150.   
  151.         @Override  
  152.         public void destroyItem(ViewGroup container, int position, Object object) {  
  153.             container.removeView((View) object);  
  154.         }  
  155.   
  156.         @Override  
  157.         public Object instantiateItem(ViewGroup container, int position) {  
  158.             ImageView imageView = imageViews.get(position);  
  159.             container.addView(imageView);  
  160.   
  161.             return imageView;  
  162.         }  
  163.     }  
  164. }  


另外最后还有一个主界面测试用(布局文件没有东西)

activity_main.xml

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="match_parent"  
  3.     android:layout_height="match_parent" >  
  4.   
  5. </RelativeLayout>  

MainActivity.java

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.example.bjnews.activity;  
  2.   
  3. import com.example.bjnews.R;  
  4.   
  5. import android.app.Activity;  
  6. import android.os.Bundle;  
  7.   
  8. public class MainActivity extends Activity {  
  9.     @Override  
  10.     protected void onCreate(Bundle savedInstanceState) {  
  11.         // TODO Auto-generated method stub  
  12.         super.onCreate(savedInstanceState);  
  13.         setContentView(R.layout.activity_main);  
  14.     }  
  15. }  

这篇关于黑马北京新闻项目连载(1)---引导界面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125327

相关文章

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

Python项目打包部署到服务器的实现

《Python项目打包部署到服务器的实现》本文主要介绍了PyCharm和Ubuntu服务器部署Python项目,包括打包、上传、安装和设置自启动服务的步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录一、准备工作二、项目打包三、部署到服务器四、设置服务自启动一、准备工作开发环境:本文以PyChar

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke