背景

先说个事:最近我准备做个开源的博客园android客户端!符合Google最新的material design设计风格的!不知道有没有小伙伴愿意和我一起做呢?如果有愿意的,请私信我哦!!!!我还打算每天直播我们工作的进度,代码,以及BUG等!!




最近在做公司的一个项目!在登陆页面那儿有几个小知识点!虽然不是很难,但我猜想还是会有很多童鞋不会!所以我觉得我有必要写一篇博客来说明一下!下面呢我就先上一下效果动态图

看效果

1.用户头像是原形,另外周围有白色光圈!

2.用户名和密码输入框在空的时候点击登陆为抖动!

原理

1.用户头像是自定义ImageView,另外读者要注意画笔的模式,下面我先给个谷歌官方的截图

这里我就不过多介绍当设置了这些模式之后会有哪些效果,在下面的代码中我也只是说明我们要用的模式!!其他的读者自己去谷歌吧!!

2.第二个就是个简单的动画!!很简单!!

代码实现

一.我们先来看那个动画效果吧!我是直接写的xml文件 看代码:


这边我是用的移动x轴方向,动画只执行一次,另外,请读者注意一下,我设置了了个动画插值器(控制动画的变化的),我是用的cycleInterpolator这个,用来控制动画循环的

这个就是动画插值器了!!执行两次!

好了动画xml写完了,我们来看看怎么执行的?

很简单,看代码就行了!我就不过多解释了!!

二.自定义ImageView的实现

1.首先我得先确定ImageView的大小

在这里我的先对上面的代码中的MeasureSpec.getMode(int size)这个方法解释下?
这个方法是得到宽高大小模式的?他有三个返回值:



MeasureSpec.EXACTLY:这个是指当你的view的大小设置成fill_parent或者固定的大小 就是大小确定的

MeasureSpec.AT_MOST:这个是指当你的view的大小设置成wrap_parent的时候,不确定 自适应

MeasureSpec.UNSPECIFIED:这个是指当你的view的大小未指定的时候,这种情况不太可能出现 我们一般不考虑!


当我们了解这个的时候,就可以确定该view的宽高了!当MeasureSpec.EXACTLY的时候,就用设置的!当是 MeasureSpec.AT_MOST的时候,就是内部图片大小加padding值!
2.开始绘制 先看代码,在解释

首先我们得获取宽高的最小值,之后再把图片缩小/放大 到这个大小,之后就是得到圆形的图片!



我们直接看getRoundBitMap(Bitmap map,int min)方法,要传两个参数,一个原图还有大小!



首先我们得绘制一个和原图一样大小的画布之后绘制圆形在绘制图片,至此就得到了圆形图片了!另外,请读者注意下,就是在我们在画布上绘制了圆形之后,为画笔paint设置了Xfermode,对就是PorterDuff.Mode.SRC_IN!那这个是什么意思呢?还记得我们在文章开头现实的那个mode的所有类型吗?他已经很好的展示了当设置了这个写mode之后的效果!首先我得先说明下 dst是先绘制的,src是后绘制的?那现在就很好理解PorterDuff.Mode.SRC_IN这个的意思了!取dst和src的交集,但是是显示src(后绘制的)!现在,大家应该能明白我先画圆形在在绘制bitmap了吧!!


现在我们再来看ondraw()这个方法,当我们得到了圆形的bitmap之后,按理说直接绘制就行了,但是问题在于外面还有层白圈!其实很简单--就是同心圆而已,只不过半径不一样罢了。只要绘制个半径比bitmap大的圆就行啦!!!




至此,本篇文章结束!!



最后还得在说下:最近我准备做个开源的博客园android客户端!符合Google最新的material design设计风格的!不知道有没有小伙伴愿意和我一起做呢?如果有愿意的,请私信我哦!!!!我还打算每天直播我们工作的进度,代码,以及BUG等!!求联系哦!!!!!!!!

记一次androidd登陆页面的实现的更多相关文章

  1. Android笔记-4-实现登陆页面并跳转和简单的注册页面

    实现登陆页面并跳转和简单的注册页面   首先我们来看看布局的xml代码 login.xml <span style="font-family:Arial;font-size:18px; ...

  2. 小KING教你做android项目(二)---实现登陆页面并跳转和简单的注册页面

    原文:http://blog.csdn.net/jkingcl/article/details/10989773       今天我们主要来介绍登陆页面的实现,主要讲解的就是涉及到的布局,以及简单的跳 ...

  3. Springsecurity3.1.3配置多个登陆页面

    需求:网站的前台和后台不同的url需要不同的登陆页面,不同的异常捕获方式. spring-security3.1以后的版本支持多个<http>标签,因此本文所采用的方式就是使用两个,实际上 ...

  4. MUI APP防止登陆页面出现白屏

    最近在用MUI开发APP,总体效果,在IOS上,是完美的,但是在低端的Android手机上,就会出现性能问题,我个人觉得最严重的是,就是首页,就是APP打开的第一个页面,在iOS上,由于性能高,所以, ...

  5. web系统登陆页面增加验证码

    传统登陆页面中包含两个输入项: • 用户名 • 密码有时为了防止机器人进行自动登陆操作,或者防止恶意用户进行用户信息扫描,需增加动态验证码功能.此时,登陆页面中包含了三个输入项: • 用户名 • 密码 ...

  6. Ajax 提交session实效跳转到完整的登陆页面

    在spring security 中 Ajax提交时,session超时,局部加载登陆页面,为解决这个问题,重写ajax提交,返回的是modeview或者没有制定datatype时; 如果检测到加载到 ...

  7. js实现登陆页面的拖拽功能

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>登 ...

  8. iOS 本地加载html登陆页面

    Html的代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  9. 修改cas登陆页面-服务器端

    原文地址:http://www.cnblogs.com/liveandevil/archive/2013/03/06/2946341.html 1.cas统一认证的登陆页面位于:cas目录/WEB-I ...

随机推荐

  1. 对正在运行的mysql进行监控

    对正在运行的mysql进行监控,其中一个方式就是查看mysql运行状态. (1)QPS(每秒Query量) QPS = Questions(or Queries) / seconds mysql &g ...

  2. Drupal如何集中控制静态变量?

    Drupal许多的函数中都使用了静态变量.按照通常的用法,静态变量的使用应该是这样的: function drupal_set_title($title = NULL) { static $store ...

  3. 【微信小程序】微信小程序wx.previewImage预览图片

    一.小知识 二.例子,配合轮播图使用效果更佳!(如图1) 1.wxml <scroll-view scroll-y="true"> <swiper catchta ...

  4. Struts2简介以及结果集转发

    一.分析之前的项目的不足,编写属于自己的框架二.Struts2简介(面试)三.搭建Struts2的开发环境 1.找到所需的jar包:发行包的lib目录中(不同版本需要的最小jar包是不同的,参见不同版 ...

  5. 【HTML5 WebSocket】WebSocket对象特性和方法

    <HTML5 WebSocket权威指南>学习笔记&3 WebSocket方法的对象特性 1. WebSocket方法 a. send方法 send方法用于在WebSocket连接 ...

  6. 测试-一个unity的编译bug,初始化器

    .net C#下测试: public class Class1 { public bool toggle1 = true; public bool toggle2; } 一个结构类Class1,对里面 ...

  7. Atitit.遍历图像像素点rgb java attilax总结

    Atitit.遍历图像像素点rgb java attilax总结 1. 遍历像素点 1 2. 提取一行 1 3. Rgb分量提取 2 4. 其他读取像素 3 5. --code 5 6. 参考 6 1 ...

  8. Vivado使用技巧:封装自己设计的IP核

    概述   Vivado在设计时可以感觉到一种趋势,它鼓励用IP核的方式进行设计.“IP Integrator”提供了原理图设计的方式,只需要在其中调用设计好的IP核连线.IP核一部分来自于Xilinx ...

  9. mysql之mysql、mysql-devel、mysql-server

    一.引言 一直都没搞明白这三者之间的关系,于是决心查资料把这个问题搞明白,遂记录以便查阅.学习 二.关系 mysql-devel 开发用到的库以及包含文件mysql mysql 客户端mysql-se ...

  10. 对java中hashmap深入理解

    1.HashMap的结构是怎样的? 二维结构,第一维是数组,第二维是链表 2.Get方法的流程是怎样的? 先调用Key的hashcode方法拿到对象的hash值,然后用hash值对第一维数组的长度进行 ...