MaterialDesign+MovePicImageView实现漂亮的登陆界面

Android学习笔记:界面设计Material Design的基本使用方法(一) 话不多说直接进入正题。本文所有使用到的图标资源下载地址:https://pan.baidu.com/s/1kWhs8mF使用到的图标、图片都在里面,按照文件夹名即可快速找到需要的资源。新建项目MaterialDesignTest,一切默认。一、标题栏Toolbar要想使用Toolbar,就必须替换掉默认的ActionBar。替换步骤分两步:1、隐藏ActionBar2、定义ToolbarActio... 阅读详情

最近正在完成一个摇一摇的项目,打算加入一点社交元素。第一步是实现登陆界面,一个人独自设计加开发。最后的效果还是比较满意,但还是有性能上的损失,应该可以做得更好。

背景图片可以循环左右移动,界面里的Edittext使用三方控件:MaterrialEdittext,其实现了Edittext的向下兼容。此库继承自AppCompatEdittext,所以支持Edittext的所有特性,而且添加了字符检测,标签动画,组件颜色的定制等。有了它基本上可以忘记系统提供的Edittext了。jar下载地址 (注意此控件依赖于NineOldAndroid,所以还需要一起导入它的jar包)

  1. MovePicImageView
    主要是基于ImageView添加了自动缩放图片和自动滚动图片的动画。我的想法是:要让图片铺满ImageView,图片的高度一定要正好是ImageView的高度,但是图片宽度一定要比ImageView宽,这样动画播放才会把其余部分显示出来。所以,可以在onSizeChanged() 方法中得到组件的宽高(不能在其它地方尤其是构造方法中调用getWidth()或getHeight(),因为此时View的绘制过程不一定完成了)。如果图片高度和ImageView高度不符合,就进行缩放。下面是方法内部的代码。
 new AsyncTask<Object,Object,Bitmap>(){
            @Override
            protected Bitmap doInBackground(Object... params) {
                //预加载获取图片宽高
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inJustDecodeBounds = true;
                BitmapFactory.decodeResource((Resources) params[0],R.drawable.flowbloom,options);
                imageWidth = options.outWidth;
                imageHeight = options.outHeight;
                int inSampleSize = 1;
                //防止图片过大,出现OOM
                if (imageHeight > (Integer) params[2] ) {
                    final int halfHeight = imageHeight / 2;

                    while ((halfHeight / inSampleSize) > (Integer) params[2]) {
                        inSampleSize *= 2;
                    }
                }
                options.inSampleSize = inSampleSize;
                options.inJustDecodeBounds = false;

                return BitmapFactory.decodeResource((Resources)params[0],R.drawable
                        .flowbloom,options);
            }

            @Override
            protected void onPostExecute(Bitmap background) {
                setImageBitmap(background);

                Drawable d = getDrawable();
                if (d == null) return;

                int dw = d.getIntrinsicWidth();
                int dh = d.getIntrinsicHeight();

                Log.i(TAG,"onPostExecute: dw: " + dw + " dh :" + dh);

                float scale; //缩放值
                scale = getHeight() * 1f / dh;

                matrix.postScale(scale,scale);
                matrix.postTranslate(-100,0);
                setImageMatrix(matrix);
            }
        }.execute(getResources(),w,h);

这里使用了 AsyncTask 新开了一个线程加载图片,然而效果并不好,反而在打开登陆界面时有一段时间的黑屏过程,还不如直接在UI线程中加载。

这里遇到了两个坑:
1、使用Matrix控制图片必须在xml文件中为ImageView添加android:scaleType=”matrix”
2、放在不同资源限定符的drawable文件夹中的Bitmap,它的Density属性是不同的。而每个设备的TargetDensity属性也是不同的(小米note是440,Vivo X3t 是320) ,系统就是根据TargetDensity到不同的drawable文件夹找图片的。举个例子,我只在drawable-mdpi中放了一张图片,那它的Density是160(图片像素1440x900)。小米note加载这张图片,因为drawable-xxhdpi没图片,于是它会对其进行缩放1440 x (440 \ 160) = 3960 , 900 x (440 \ 160 ) = 2475。于是内存中图片的真正像素是(3960 x 2475)。所以,如果不注意为每个drawable文件夹配上图片,可能不同设备上的图片像素会不一致。(注意:测试系统 API23、AndroidStudio2.1)

自动滚动图片是由一个MoveImageAnimator实现的动画的效果。

private class MoveImageAnimator extends Animation {
        @Override
        protected void applyTransformation(float interpolatedTime,Transformation t) {
            super.applyTransformation(interpolatedTime,t);
            RectF r = getMatrixRectF();

            if (r.left > 0 || r.right < getWidth()) {
                back = !back;
            }


            if (back) {
                matrix.postTranslate(2,0);
            } else {
                matrix.postTranslate(-2,0);
            }
            setImageMatrix(matrix);

        }
    }

移动方法很简单,使用Matrix对图片进行水平位移操作。这里需要注意的就是对图片左右边框的判断,如果到达图片的左右边框,让back=!back 就是碰撞到边框马上返回。检测图片的左右边框可以使用下面的方法:

/**
     * 此方法能获取View中图片的描述RectF
     * @return
     */
    private RectF getMatrixRectF() {
        Matrix m = matrix;
        RectF rectF = new RectF();

        Drawable d = getDrawable();
        if (d != null) {
            rectF.set(0,0,d.getIntrinsicWidth(),d.getIntrinsicHeight());//当前图片宽高(不改变的)
            m.mapRect(rectF);//将matrix中的值映射到rectF中
        }

        return rectF;
    }

项目GitHub: https://github.com/HYY-yu/MovePicImageView

android[引用MATERIAL DESIGN第三方页面控件] 阅读详情

相关推荐

Android超级好看的动态登陆界面(附有详细代码)

QQ视频20220819164103从视频效果中,看到这个动态的登陆界面还是比较好看的,下面开始介绍如何制作这个动态的登陆界面。这里有一点值得说一下,我们使用MotionLayout这个布局来实现动画效果,这个布局平时不太常见,它其实是属于ConstraintLayout的子类,所以它是一种布局类型,但是它能够为布局属性添加动画效果,是开发者实现动画效果的另一个新的选择。目前所实现的静态效果如下:接下来会通过资源文件来实现动态效果。...

m0_58941767的博客 8530

Android美观登录界面,Material Design实现的美观的登录界面

Material Design Library例子中采用了Material Design的库的控件,但是具体使用细节没有写出来,容易遇到很多问题。Bug: Error inflating class android.support.design.widget.TextInputLayout :添加完xml后,运行时报错。解决方法: 1.在module的gradle中添加依赖compile 'com...

weixin_39849942的博客 714

Android很好看的登陆界面(包含详细代码)

在这里给大家安利一下设计风格,这个组件库的里面的组件和Android原生的组件的设计风格几乎相同,只不过里面加了很多个性化的设置,可以根据自己的需求去自行设计样式,里面的组件的各种性质,几乎可以满足我们的日常需求,还没有使用过的Android开发小伙伴可以去尝试一下。

m0_58941767的博客 7631

Android 一个美观简洁的登录界面(一)

Android 一个美观简洁的登录界面 输入框样式 一.登录式样1: 1.效果图: 2.布局代码: <?xml version="1.0" encoding="utf-8"?> <!--登录界面,用LinearLayout--> <LinearLayout xmlns:android="http://schemas.androi...

shenggaofei的博客 1万+

Material Design风格登录界面

Material Design风格登录界面(采用 MVP + Data-Binding + Material Design )。

Android非常漂亮好看的登陆,注册界面!

Android非常漂亮好看的登陆,注册界面!做有逼格的程序员,不要重复的造轮子!

Android 自定义圆角、立体ImageView -- MaterialImageView

Android 自定义圆角、立体ImageView – MaterialImageView public class MaterialImageView extends ImageView { private GradientDrawable mMaskDrawable; private Paint mMaskedPaint; private boolean mCacheV

Linyu_218的博客 676

2023-11-20 MySQL ARM64 银河麒麟

背景 MySQL是常用数据库,Windows安装比较容易,笔者也有记录。现在国产化系统银河麒麟中安装,不同的是软件安装包不容易下载。一是安装的方式,再一个是MySQL本身的版本,网上很多文档说明其实都是对的,但是为什么那么多都不一样呢?就是MySQL本身的版本差异比较大,这些差异笔者也不是很清楚,但是不要用8和5.7的差异非常大,8即使安装的很顺利,在使用过程也会很多坑,导致我宁愿卸载8,也要重新...

jxmh1991@163.com 811

Android好看的登录注册页面

登录页 注册页 部分代码贴图

QingHuanWu的博客 1332

传感器:MQ-5燃气模块测量燃气值(底部附代码)

本篇文章介绍使用MQ-5燃气模块测量燃气值,CPU还是选择单片机,MQ-5主要使用的技术为ADC,燃气对于单片机来说是模拟信号,需要转换为数字信号,再经过相关计算公式将燃气模拟值转换成对应的燃气数值,便于人们方便查看。例如家庭使用燃气模块测量燃气值,如果燃气值超过一定的范围,可以外设一个报警装置,保证家庭的生命安全。(1)ADC(analog to digital converter)即模数转换器,它可以将模拟信号转换为数字信号。按照其转换原理主要分为逐次逼近型、双积分型、电压频率转换型三种。STM32F1

Mr_zhang1911116的博客 1万+

如何导入su_利用GIS快速生成SU场地模型

01|前言:进入2021年了,希望大家也是一个新的开始。告诫自己多写文章多更新,多读点书多旅行。然而元旦由于出去玩了4天,积累了一些事情要处理,一直没有时间好好写点东西。今天给大家带来的分享主题叫“利用GIS快速生成SU场地模型”。相关的视频方法其实B站上也有,但我相信视频很多人都不会看,我自己也是。直接给大家上操作流程。主要的操作步骤是【获取场地的矢量shp文件】—【导入ArcScen...

weixin_33806859的博客 9813

Android 好看的登录界面

例图1: 例图2: 例图3: 例图4: 例图5:

架构师之路 6205

告别电机啸叫!手把手教你配置TMC5160的StealthChop2静音模式(附参数自整定避坑指南)

本文详细介绍了如何通过配置TMC5160的StealthChop2模式彻底消除3D打印机电机噪音。从硬件准备到参数自整定,再到高级调优与异常处理,手把手教你实现实验室级别的静音效果,提升打印质量和使用体验。

weixin_33724659的博客 487

【亲测免费】 推荐:创新美观的Android登录界面——LoginUI

在这个视觉体验至关重要的数字时代,一个引人注目的用户界面往往能为你的应用增色不少。今天,我们向您推荐一个名为[LoginUI-Android](https://github.com/Shashank02051997/LoginUI-Android)的开源项目,它是一个充满创新、美丽且创意十足的Android登录界面。 ## 项目简介 LoginUI-Android由Shashank设计,旨在提

gitblog_00006的博客 924

遥感图像地物覆盖分类,数据集制作-分类模型对比-分类保姆级教程

1.新建shp文件地理坐标系保持和影像一致,面类型2.打开属性表3.添加字段这里分类6类,点击添加值添加添加完毕开始人工选地物类型,制作数据集开始标注,标注的时候可以借助谷歌地图来看标记足够多的样本打开面转栅格工具设置nodata值为15。

热爱分享,热爱记录 2526

【人工智能的数学基础】最优传输(Optimal Transport)问题与Wasserstein距离

代表两堆石子,则问题等价于如何移动一堆石子,通过最小的累积移动距离把它堆成另外一堆石子。的不同位置分配的值。为离散型概率分布,则该优化问题可以表示为矩阵形式。表示寻找总运输成本最小的方案。放大后的上确界不会小于原来的上确界,因此不妨取。具有相同的概率分布。是概率分布,因此积分可以写作采样形式。描述了一种可行的运输方案,表示应该从位置。则最优传输问题的目标函数可以用列向量。对于一个线性规划问题,总可以写出其。的所有可能联合分布的集合,下确界。其中矩阵的每一行代表概率分布。表示寻找使得目标函数最大的。

AI天才研究院 6328

Android精美登录界面设计

先看效果图:   这个Demo除了按钮、小猫和Logo是图片素材之外,其余的UI都是通过代码实现的。   一、背景   背景蓝色渐变,是通过一个xml文件来设置的。代码如下:   background_login.xml [html] view plaincopy xml version="1.0"

宝爷的专栏 1462

吃透工业通信:C#工控机实现Modbus、OPC UA、Profinet、EtherCAT协议全适配

本文介绍了基于C#的工业通信协议全适配方案,采用分层架构设计实现Modbus、OPC UA、Profinet和EtherCAT四种主流协议的统一管理。核心包括:1)三层架构(应用层、抽象层、协议层)降低耦合;2)定义统一通信接口IIndustrialCommunication;3)工厂模式创建不同协议实例;4)以Modbus TCP为例展示具体实现。该方案经过实际项目验证,可简化多协议设备管理,提升工业自动化系统的开发效率。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 723

Android Material UI控件之ShapeableImageView

Android Material UI 之 ShapeableImageView 文章目录前言1.基本使用① scaleType属性简介1.样式使用总结 前言 你有使用过Material中的UI控件吗?为什么要使用它们,相对于原来的控件优势在哪里?   相信你看到这篇文章也会有所疑问,第一个问题就不用说了,那么从第二问题开始回答,Android官方为开发者提供了许多丰富的UI控件,Material 组件就是包含了这些控件的一套工具,多数时候使用它可以满足我们日常开发UI的需求,提高效率。优势就在于它比原

晨曦 4045

开关电源中的高频振荡噪声及其抑制方法

在开关电源的工作过程中,随着开关管的开关动作,电流和电压波形会出现剧烈的波动,尤其是在开关管切换的瞬间,往往会导致较强的过冲现象。开关电源中的高频振荡噪声是导致电磁兼容问题的主要源头之一,尤其是MOS管的通断和整流二极管的反向恢复过程中,会产生较强的高频振荡噪声。通过合理调节R和C的值,可以大大缓解高频振荡带来的EMC问题,从而有效提升电源的电磁兼容性。整流二极管反向恢复时的振荡会导致高频噪声产生,这些高频噪声源可被传导到电源的输出端,甚至可能通过电源的共地路径扩散到其他电路,影响系统的稳定性和可靠性。

硬核科技 1531

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

推荐一个优雅的Android登录界面库——MaterialLogin

推荐一个优雅的Android登录界面库——MaterialLogin 去发现同类优质开源项目:https://gitcode.com/ 在当今移动应用设计中,用户界面的设计至关重要,它直接决定了用户的体验感和留存率。今天,我们要推荐一个专为Android开发者打造的,基于Material Design风格的登录视图库——MaterialLogin。这个开源项目旨在帮助开发者轻松创建美观且符合现代设...

gitblog_00068的博客 654

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android漂亮好看的登陆,注册界面!(有可运行Demo)

界面如上图所示

箍心而行 3万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Material Design实现的美观的登录界面

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33738982的博客 993

教你写一个炫酷的Material Design 风格的登录和注册页面

每个人都会喜欢漂亮的登录界面,一个App 给人们的第一印象是非常重要的。这篇文章将教你使用谷歌材料设计规范(Material design spec )和谷歌的新的设计支持库( design support library)来创建一个炫酷的登录和注册界面。设计支持库实现了材料设计规范的一部分,它包含了一部分炫酷的UI 部件,让你的Android 应用给人一种优雅的感觉。对事物的设计和布局方面,如何做

tikitoo的专栏 1万+

Material Design风格登录界面实现总结(一)

Material Design风格登录界面实现总结(一) 一、activity_main: 1.设置布局总体背景(插入一张图片作为背景): android:background="@drawable/bg_login" 2. 引入CarView组件         android:id="@+id/login_card"         android:layout_width

lzg13663472636的博客 2436

仿知乎app登录界面(Material Design设计框架拿来就用的TexnInputLayout)

在我脑子里还没有Material Design这种概念,就我个人而言,PC端应用扁平化设计必须成为首选,手当其冲的两款即时通讯旺旺和QQ早就完成UI扁平化的更新,然而客户端扁平化的设计本身就存在天生的缺陷,手指和鼠标箭头最大的区别是在于前者有温度和感觉的,这时候Material Design应运而生。 关于Material Design,材料设计你大概...

weixin_34301307的博客 458
上一篇: 学习笔记----快速排序的java实现
下一篇: 实现Activity和Service通信的几种方案
csdnYF
博客等级 码龄12年 406粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值