Android仿老版本陌陌登录注册介绍页实现
楼主手机上装了好多个软件,陌陌不常玩的,看了下它的登录注册下面是一些美女的图片,而且有透明度的变化,关键是图片没有压缩和失真的情况,然后分析了下,这些肯定不是一张背景图了,可想而知,著名的9宫格啊,这样的话,实现方式就多了,GridView,自定义Layout等,今天我以自定义ViewGroup的方式来尝试下这个实现
先看下效果
首先看了下,一行是3张图片,按照矩阵的思路,就是3 * 3,看着效果图就是5行3列,也就是这个子View的总数 = rows * columns = 5 * 3 = 15
自定义ViewGroup流程 大家可以去百度很多讲解的不错,楼主也没看过源码,只知道onmeasure(测量子View,为当前容器设置大小)-----> onLaout(设置子View位置,也就是测量后排版)
最好的是自己定义一个ViewGroup看一下执行的流程,以下是我写的时候测试的方法执行顺序
可以看到先执行onFinishInflate,这里一般处理布局layout里child的初始化,getchild(0)
可以看到onSizeChanged只执行一次,这里可以获取viewGroup的宽高
而onMeasure,onLayout可能执行多次,这里是2次,我们可以使用标示位做些处理,当onLayout执行两次的时候我没处理,导致第一张图片会重复覆盖的情况,我加了标示位后问题解决。
以下是代码实现思路
onmeaure时addChildView
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {Log.i("MoMoHomeLayout","onMeasure"); addChildView(); super.onMeasure(widthMeasureSpec,heightMeasureSpec); }
默认是getSugesstionWidth和getSugesstionHeight
onLayout根据想要摆放的位置来定位child的position,根据陌陌的效果是5 * 3 即是5行3列的 所以总的child个数是 5 * 3,所以要获取到每个childView 的position 计算出这个childview 的left 和 top 完成Layout的工作 ,简单的算法如下
private int[] getLetTop(int childIndex) {int[] LeftTop = new int[2]; for (int i = 0; i < rows; i++) {for (int j = 0; j < columns; j++) {if (i * columns + j == childIndex) {LeftTop[0] = i; LeftTop[1] = j; Log.i("LeftTop", "row is " + i + "columns is " + j); break; }}}return LeftTop; }
根据安卓的坐标系 onLayout代码如下
@Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) {Log.i("MoMoHomeLayout","onLayout"); if(!once){for (int i = 0; i < getChildCount(); i++) {View view = getChildAt(i); int[] position = getLetTop(i); int mLeft = singleWidth * position[1]; int mTop = singleHeight * position[0]; view.layout(mLeft, mTop, mLeft + singleWidth, singleHeight + mTop); once = true; }} }
这里代码基本已完成了80%了,下面就是一些效果的实现,忽明忽暗的很容易想到alpha,而且要用到随机数
代码如下
int randowN = (int) (Math.random() * (rows * columns - 1)); if(cIndex == -1){cIndex = randowN; View view = getChildAt(randowN); ObjectAnimator animator = ObjectAnimator.ofFloat(view, "alpha", 1.0F); animator.setDuration(500); animator.start(); }else{View oldView = getChildAt(cIndex); cIndex = randowN; View newView = getChildAt(randowN); ObjectAnimator oldAnimator = ObjectAnimator.ofFloat(oldView, "alpha", 0.4f); oldAnimator.setDuration(500); oldAnimator.start(); ObjectAnimator newAnimator = ObjectAnimator.ofFloat(newView, "alpha", 1.0f); newAnimator.setDuration(500); newAnimator.start(); } postDelayed(runnable,2000);
使用handler postDelayed 递归实现 随机切换
总体来说很简单
可以熟悉一下自定义ViewGroup的流程及执行的顺序
Android仿老版本陌陌登录注册介绍页实现相关推荐
- 微信小程序仿淘票票之登录注册讲解
微信小程序仿淘票票之登录注册讲解(这也是我学习的第一步嘛) 前言 一.登录以及注册的业务逻辑 二.核心代码 1.register代码 2.login代码 总结 前言 愉快的期末,终于结束了,我准备把程 ...
- Android Studio老版本下载方法(2019.11.29)
近期学习Android开发,找到的资源都是使用Android Studio老版本进行教学,与新版本在操作上略有不同,学习时可能会有一些步骤跟不上,而且以Anrdoid Studio3.5为基础的问题分 ...
- Android+SpringBoot前后端分离实现登录注册
Android+SpringBoot前后端分离实现登录注册 一.登录 1.界面设计 2.Android端 (1)布局文件(activity_login) (2)java文件(LoginActivity ...
- 带翻转特效的会员登录注册html页面源码
大家好,今天给大家介绍一款,带翻转特效的会员登录注册html页面源码(图1).送给大家哦,获取方式在本文末尾. 图1 点击登录和注册切换时,带翻转特效(图2) 图2 源码完整,需要的朋友可以下载学习( ...
- Android+Blockly大作业(含登录注册系统、碎片式浏览、Blockly设计)
此次大作业实现功能包括: 1.数据库的搭建 2.登录注册界面及主界面界面的设计 3.碎片的应用 4.webBlockly的嵌套 我曾在不同活动调用数据库的bug.数据库的检索和碎片的实现上花了很多时间 ...
- android安卓Sqlite数据库实现用户登录注册
看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下! 建立一个类 并继承SQLiteOpenHelper public ...
- Android Studio开发:简单的登录注册界面
Android开发:编写简单的登录界面与注册界面 1.登录界面布局 1.1主布局的布局方式是垂直布局,第一个TextView控件在顶部居中布置,显示"用户登录 "字样 <Te ...
- android 内核老版本下载安装,百度极速版老版本下载安装
百度极速版老版本是一款非常好用的手机搜索软件,不仅搜索引擎极其强大,而且用户还可以分各种类别来搜索自己想要看到的内容,有句话是叫不知道问度娘,正是因为百度的搜索引擎十分的强大,万事皆可在百度上进行搜索 ...
- javaweb开发的仿推特项目之登录注册功能
博主最近学习一个仿推特javaweb项目,其采用Jsp+Servlet的方式进行设计,MySQL数据库,Tomcat8服务,界面上十分美观,功能也较为健全,给大家分享一下: 项目地址 登录界面: 核心 ...
最新文章
- js怎么取到遍历中的特定值_LeetCode 1028 hard 从先序遍历还原二叉树 Python解题记录...
- 专访 | 周涛:从窄门进最终走出宽路来
- mysql主从同步-问题梳理
- 基于 FPGA 的数字抢答器设计
- linux安装mysql5.7.18_Linux下安装mysql5.7.18版本步骤
- Androidd打开文件选择器并返回文件的真实路径——听风便是雨,倚栏卧人间
- 2019云栖大会归来有感
- 语义分割论文:Fully Convolutional Networks for Semantic Segmentation (CVPR2015)
- 在framework下新建系统api
- wps怎么减少行间距_wps怎么设置行距_wps的行间距在哪怎么调整单倍行距及1.5倍行距_wps文字_office之家...
- 花998购买的拍摄技巧和7天起号培训文档,学了一周的总结。
- 康威定律,作为架构师还不会灵活运用?
- YELP NLP 英文文本断句
- XSell和Xftp的简单使用方法
- Vue知识点总结(一)
- 间歇控制器的工作原理,神经网络控制应用实例
- 信息学奥赛一本通| 1187:统计字符数
- SPSS(十二)SPSS对应分析(图文+数据集)
- From Data Mining to Knowledge Discovery in Databases
- win7 x64 windbg 双机调试
热门文章
- 输入法字母和数字间距变大的解决方法
- Linux配置Yum软件仓库
- BlueStacks蓝叠 安装后启动时:初始化失败或者引擎启动失败
- linux安装 openbabel pybel
- Ubuntu18.04下安装openfoam的一种方法
- 百度WebUploader之实现文件上传与下载
- DirectX11 With Windows SDK--09 纹理映射与采样器状态
- 达梦数据库全备失败故障处理[-718]错误
- 太强了,阿里高级工程师熬夜n天码出 Java 150K 字面试宝典
- 谷歌浏览器安全警告“您要访问的网站包含恶意软件”的解决方法