Android图片加载框架最全解析(一),Glide的基本用法
Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程
Android图片加载框架最全解析(三),深入探究Glide的缓存机制
Android图片加载框架最全解析(四),玩转Glide的回调与监听
Android图片加载框架最全解析(五),Glide强大的图片变换功能
Android图片加载框架最全解析(六),探究Glide的自定义模块功能
首先,添加依赖
implementation 'com.github.bumptech.glide:glide:4.11.0'
之后添加访问网络权限
<uses-permission android:name="android.permission.INTERNET" />
1、加载图片到imageView
Glide.with(this).load(url).into(imageView);
2、加载带有占位图
Glide.with(this).load(url).placeholder(R.drawable.loading).into(imageView);
3、加载指定大小的图片
Glide.with(this) .load(url) .placeholder(R.drawable.loading) .override(100, 100)//指定图片大小 .into(imageView);
就是每英寸的像素点数,数值越高当然显示越清晰,通常 与“正常”或“高”密度屏幕相比,“低”密度屏幕在给定物理区域的像素较少。
在定义 UI 布局时应使用的虚拟像素单位,用于以密度无关方式表示布局维度 或位置。
密度无关像素等于 160 dpi 屏幕上的一个物理像素,这是 系统为“中”密度屏幕假设的基线密度。在运行时,系统 根据使用中屏幕的实际密度按需要以透明方式处理 dp 单位的任何缩放 。dp 单位转换为屏幕像素很简单: px = dp * (dpi / 160)。 例如,在 240 dpi 屏幕上,1 dp 等于 1.5 物理像素。在定义应用的 UI 时应始终使用 dp 单位 ,以确保在不同密度的屏幕上正常显示 UI。
六种通用的密度: ldpi(低)~120dpi mdpi(中)~160dpi hdpi(高)~240dpi xhdpi(超高)~320dpi xxhdpi(超超高)~480dpi xxxhdpi(超超超高)~640dpi
节选自:Android样式开发之你应该学会的layer-list!
我们在前面已经讲过了shape和selector,可以说它们在Android的界面设计开发当中用的非常多,对控件的美化至关重要!
而今天我们要学习的layer-list可以进一步扩展对shape和selector的使用,对layer-list可以这样简单的来理解,使用它可以将多个图片叠加起来,可以将用shape和selector实现的效果叠加起来。比如我们可以使用shape绘制一个形状,我们这里以直观的矩形为例吧!如下,是我们使用shape绘制的一个矩形。 继续阅读Android样式开发之你应该学会的layer-list!
selector是什么?
selector是选择器的意思,从字面上理解应该是给我们提供可选择对象,那么在Android开发当中是什么呢?我们上一篇讲到Android样式开发中的shape,我们知道shape可以为控件设置背景,但是如果遇到这样的需求我们该怎么办呢?–对于一个button,我们点击的时候是一个图片,默认的时候是另一张图片。这样的话用shape似乎无法实现,因为shape无法控制一个控件状态的改变,对,我们要记住状态两个字,因为selector就是为多种控件在不同状态下显示不同的效果,这里的状态包括,被点击,被按压,被触摸以及被选中等状态,当一个按钮被点击和没有被点击的时候,我们可以通过selector让其显示不同的背景或者字体颜色等。
节选自:GSONFormat的简单使用
在Android Studio中,可以利用 GsonFormat插件,快速创建符合 Gson要求的 javaBean 。GSONFormat地址:https://github.com/zzz40500/GsonFormat
小tip:应该直接把从接口拿到的数据粘贴,避免 api 文档格式问题带来的各种不必要的 bug
1.全局搜索类:Ctrl + N
2.全局搜索文件:Ctrl + Shift + N
3.搜索字符串:Ctrl + F
4.全局搜索字符串:Ctrl + Shift + F
5.快速生成构造函数,Get、Set方法等:Alt + Insert
6.编辑位置回退/前进:Ctrl + Alt + 向左箭头/向右箭头
7.左右切换代码视图:Alt + 向左箭头/向右箭头
8.自动导入包:Ctrl + Alt + O
9.格式化代码:Ctrl + Alt + L
10.方法参数提示:Ctrl + P
11.用“try / catch”等包围代码:Ctrl + Alt + T
12.跳转到声明位置(PS:也可以跳转到使用位置):Ctrl + B ,Ctrl + 鼠标左键
13.跳转到实现位置:Ctrl + Alt + B
14.编辑界面横向滚动:Shift + 鼠标滚动
15.跳转到父类方法:Ctrl + U
参考链接:
import android.text.TextUtils; /** * 数据脱敏工具类 */ public class DataMaskingUtil { /** * 姓名脱敏 * * @param name * @return */ public static String maskName(String name) { if (TextUtils.isEmpty(name)) { return ""; } if (name.length() == 2 || name.length() == 3) { return name.replaceFirst("(.).", "$1" + "*"); } else if (name.length() == 4) { return name.substring(0, 2) + "**"; } else if (name.length() > 4) { return name.substring(0, 4) + "****"; } return name; } }
参考链接:
最近写项目时遇到一个很奇怪的问题,在Relativelayout中Button始终在最顶层,无法被其他控件覆盖,然后试了下在Android 5.0以下的版本可以被正常覆盖,几经周折,终于找到了原因。
产生原因:stateListAnimator属性
谷歌在Material Design中推出,是一个非常简单的方法用来实现在可视状态之间平滑过渡。这个属性可以通过android:stateListAnimator进行设置,可以使控件在点击时产生不同的交互。对于Button,点击时默认有个阴影的效果用于表示按下的状态(5.0以前就是简单的变色)。
解决方法:
1.如果Button已经有自定义的selector样式而不需要原生的按下后的阴影效果,可以使用android:stateListAnimator=”@null”去掉阴影效果而使Button可以被正常的覆盖
2.如果希望保留Button的阴影效果而又想使其能够被覆盖,则应该使用个单独的Linearlayout对Button进行包裹,记住要给Button的下方和左右侧留出空余。这种方法虽然不符合规范,但是为了需求只得这么做了。
代码示例:
<LinearLayout android:layout_width="match_parent" android:layout_height="52dp"> <Button android:id="@+id/btn" android:layout_width="match_parent" android:layout_height="42dp" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:background="@drawable/login_btn_selector" android:text="@string/app_login" tools:ignore="UselessParent" android:textColor="@color/white" android:textSize="20sp" /> </LinearLayout>