欢迎页导航页SplashActivity-仿ClassIn-页面布局系列

2023-10-19 09:32

本文主要是介绍欢迎页导航页SplashActivity-仿ClassIn-页面布局系列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Splash Activity 欢迎页-仿ClassIn


  • 完整代码ZIP:下载
    *更多其他页面-自定义View-实用功能合集:点击查看

带圆点指示器可以浏览这篇文章点击跳转
带条形指示器可以浏览这篇文章点击跳转


实现步骤:
1.使用ViewPager实现左右翻页layout
2.自定义绘制组件DotPointerView,通过监听ViewPager.OnPageChangeListener刷新绘制圆点指示器
3.滑动至第三页时,显示按钮,并为按钮添加属性动画使其向上位移
在这里插入图片描述

SplashTwoActivity


/*** 作者:YFZ* 简介:导航页,翻到最后一页显示按钮* Android技术生活-QQ交流群:723592501* 风格1:添加自绘制的翻页圆点指示,动画按钮*       模仿APP "ClassIn" 的欢迎页*/
public class SplashTwoActivity extends AppCompatActivity {private LayoutInflater layoutInflater;private ViewPager mViewPager;private ArrayList<View> mArrayList;private View mView1,mView2,mView3;private Button mButton;private DotPointerView mDotPointerView;@Overrideprotected void onCreate(Bundle savedInstanceState) {Util.fullScreen(this);super.onCreate(savedInstanceState);setContentView(R.layout.activity_splash_two);initialView();initialViewPager();}private void initialView(){layoutInflater=getLayoutInflater().from(this);mViewPager=findViewById(R.id.viewPager);mButton=findViewById(R.id.button);mDotPointerView =findViewById(R.id.dotLayout);mView1=layoutInflater.inflate(R.layout.splash_two_view_1,null);mView2=layoutInflater.inflate(R.layout.splash_two_view_2,null);mView3=layoutInflater.inflate(R.layout.splash_two_view_3,null);mArrayList=new ArrayList<>(); //将想要展示的view储存到数组中mArrayList.add(mView1);mArrayList.add(mView2);mArrayList.add(mView3);mViewPager.setAdapter(new ViewPagerAdapter()); //添加视图桥梁mViewPager.setOnPageChangeListener(new ViewPagerChangeListener()); //监听页面状态mViewPager.setOffscreenPageLimit(mArrayList.size()-1);  //允许最大view缓存数量mViewPager.setOverScrollMode(mViewPager.OVER_SCROLL_NEVER); //去掉翻到顶页和尾页的水波纹mDotPointerView.setPointerStyle(mArrayList.size(),10,10,10,getResources().getDrawable(R.drawable.splash_two_dot_selected),getResources().getDrawable(R.drawable.splash_two_dot_unselected));}private void initialViewPager(){}//添加切换页面class ViewPagerAdapter extends PagerAdapter{@Overridepublic int getCount() {return mArrayList.size(); //返回记录的view最大数量}@Overridepublic boolean isViewFromObject(@NonNull View view, @NonNull Object object) {return view==object;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {Log.d("TAG", "instantiateItem: "+position);container.addView(mArrayList.get(position));return mArrayList.get(position);}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView(mArrayList.get(position));}}//监听页面状态class  ViewPagerChangeListener implements ViewPager.OnPageChangeListener {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {  //翻到最后一页才显示按钮if(position==mArrayList.size()-1){mButton.setVisibility(View.VISIBLE);startAnimation(mButton);}else {mButton.setVisibility(View.GONE);}mDotPointerView.refreshPointer(position); //刷新圆点UI,传入当前选中的页面位置}@Overridepublic void onPageScrollStateChanged(int state) {}}//结束按钮public void clickFinish(View view){finish();}//按钮动画private void startAnimation(View view){ObjectAnimator objectAnimator= ObjectAnimator.ofFloat(view,"translationY",150f,0f);objectAnimator.setDuration(300);objectAnimator.start();}

Android技术生活交流

q群


这篇关于欢迎页导航页SplashActivity-仿ClassIn-页面布局系列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma