乱码三千 – 分享实用IT技术

乱码三千 – 码出一个新世界


  • 首页

  • 归档

  • 搜索

android中获取控件坐标的几种api区分

发表于 2021-11-25

前言

我们经常会看到以下几个方法:

  • getGlobalVisibleRect()

  • getLocalVisibleRect()

  • getLocationOnScreen()

  • getLocationInWindow()

傻傻分不清? 今天我们简单介绍一下它们各自的作用

getGlobalVisibleRec

方法作用:

其一: 用于判断控件是否可见, 以屏幕为参考 如果可见返回true, 不可见返回false, 我们可以借助该方法检测控件是否被滑出屏幕外

其二: 用于获取控件可见区域的坐标, 这个坐标是相对于屏幕而言

在这里插入图片描述

坐标存放在了Rect对象中, 以参数的形式传入:

1
getGlobalVisibleRect(new Rect)

getLocalVisibleRect

这个方法和上面的getGlobalVisibleRec方法类似, 唯一区别是参考系不同, 这个方法参考系是控件本身

以下是这两个方法的坐标打印:

getRect

getLocationOnScreen

获取控件相对于屏幕而言的坐标位置, 与可不可见无关

getLocationInWindow

获取控件相对于父控件而言的坐标位置, 与可不可见无关

在这里插入图片描述

坐标补充

我们在进行自定义控件绘制的时候, 总是容易被一些参数给绕的头晕脑涨, 什么top right, left, bottom, 四条边与屏幕的距离等等, 想想就觉得费劲, 再加上Android中坐标系和我们数学中的坐标系不一致 使得我们在进行计算的时候难免有点吃不消

实际上对于一些规则的图形绘制, 比如矩形, 我们需要明白的一点, 那就是只需要两个点的坐标即可绘制出来, 也就是两个对角点

那我们在进行图形绘制的时候, 将计算范围缩小, 焦点集中在两个对角坐标位置计算上即可

这两个对角可以使左上角右下角, 也可以是左下角和右上角

这样一想, 那么所谓的left和top实际就是左上角的xy坐标, 而right和 bottom就是右下角的坐标

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

关于Android中adjustResize属性不生效的问题

发表于 2021-11-22

前言

写聊天布局的时候需要给Activity用上adjustResize属性来保证输入框不会被软键盘遮盖住

如果该属性不生效, 那么一般情况是没有给布局添加fitsSystemWindows属性, 那么给布局根控件添加该属性即可:

1
android:fitsSystemWindows="true"

此时adjustResize属性生效, 但是新问题又出现了, 布局上方出现了一块间隔区域

image-20211122135418218

解决方案

重写根控件的onApplyWindowInsets方法, 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
class ChatLayout @JvmOverloads constructor(

context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {

override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets {
return super.onApplyWindowInsets(insets.replaceSystemWindowInsets(0, 0, 0,
insets.systemWindowInsetBottom
));
}
}

问题解决

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

关于继承和接口的形象理解

发表于 2021-11-19

前言

很多Java初学者对于继承和接口的作用区分总是很模糊, 如果不是因为回调需要接口, 估计能用继承实现的都用了继承

继承和接口有很多相似的地方, 比如抽象实现

但是它们的不同点呢 这个就得考虑到实际应用场景了, 脱离了业务研究 啥也不是

今天我们只说一个形象比喻

继承是先天 接口是后天

何为先天, 一生下来就有, 不要也得要, 说的高端一点这叫天赋

何为后天, 和父母无关 全靠自己

比如 父母有个好嗓子, 你继承了这个优点, 不用努力就比别人强

随着年龄的增长, 你发现干IT能促进植发行业的发展, 于是乎通过后天努力掌握了编程技能

那么

好嗓子–继承而来–继承

编程技能–后天获取–接口

似乎还是有点抽象 哈哈, 具体一点, 比如我们想让所有的子类都有相同的一个功能, 那我们可以使用继承

如果我们想让其中一部分子类有某个功能, 而剩下一些没有, 则可以使用接口, 实现差异化处理

也就是说接口的功能 可要可不要, 想要什么样的就接什么样的 比较自由 而继承的话全部子类必须都得有 没得选

后天可以弥补先天的不足, 接口可以弥补继承的不全面

不知道能不能理解

无妨 , 编程这东西 就是编程来的 慢慢就都明白了, 以上也只是个人的小小想法罢了

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

YouTube视频和字幕下载以及合并的工具推荐

发表于 2021-10-26

前言

最近有一个视频下载的需求, 需要将视频以及中英文字幕下载下来, 于是乎用到了一些工具, 有些使用体验还不错, 在此推荐给大家

视频下载

以下以YouTube视频网站为例:

YouTube视频或音频在线下载

YouTue视频下载软件 免费用户每天可以下载5个不带字幕视频 格式转换和视频与字幕合并功需要付费能 支持Windows和Mac平台

字幕下载

YouTube字幕在线下载 支持多种语言和双语字幕

视频和字幕合并

这个就得使用软件了, 免费的有:

  • 格式工厂
  • 诸如pr、剪映、比剪等剪辑工具
  • 小丸工具箱 目前只支持Windows平台
  • Subler 目前只支持Mac平台
  • tipard_video_converter_ultimate 提供Mac下载 (访问密码:312306)

如果非要在线合并的话, 推荐使用B站的云剪辑

其界面长这样:

image-20211026171444006

如果你刚好是UP主, 需要合并完视频后直接投稿, 可以使用这种方式, 挺方便的

然而最后我选择了tipard_video_converter_ultimate这个软件处理字幕和视频的合并, 界面如下:

image-20211026170010642

image-20211026171217226

这个软件不仅可以添加字幕 同时也可以移除字幕或者音频

就是转换的速度不是很快, 导出的视频文件体积过大 两百多M的视频, 花了快十分钟 最后视频体积高达2个G

值得欣慰的是字幕合成的质量不错:

image-20211026175323771

我还尝试了使用B站云端剪辑合成, 没有对比就没有伤害:

image-20211026175441786

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

解决Mac平台USB移动硬盘无法写入和删除数据的问题

发表于 2021-10-22

前言

使用Mac的小伙伴应该会碰到相关问题

我们在接入移动硬盘时只能读取数据却不能写入或者删除数据

这是移动硬盘格式不兼容导致的, 可以通过格式化硬盘的方式来实现Mac和Windows平台双端兼容, 但格式化意味着移动硬盘数据全部被清除

这肯定不是我们想要的

为了解决这个问题, 网上也出了相关的NTFS读写, 但是都是收费的

后来找到一款免费的NTFS移动硬盘读写工具 名为Omi NTFS, 体验还不错 这里推荐给大家使用

工具下载地址

点击下载

(访问密码:312306)

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

如何撤销上一次 Git add 的内容

发表于 2021-10-12

前言

有时候, 我们使用git add .不小心误添加了某些个文件到本地暂存库中, 如果我们需要撤销该add记录, 可以通过以下方式

撤销指令

  1. 撤销上次add的指定文件

    1
    git reset HEAD <路径/文件名>
  2. 撤销上次add的所有文件

    1
    git reset HEAD

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Kindle传书的几种便捷方式

发表于 2021-09-30

前言

给使用kindle的小伙伴介绍几种好用的传书方法

第一种 使用网页传书

官方网址: https://easychuan.cn/

image-20210930094805282

我们只需要将文件上传, 得到一个取件码, 然后在kindle中打开体验版浏览器, 同样输入https://easychuan.cn/

image-20210930095755229

填入相应的取件码就可以直接下载了

第二种 使用邮箱传书

kindle亚马逊账号登录后会自动分配一个邮箱账号, 这个账号可以在kindle设置中进行查看获取

我们只需要将文件发送到这个邮箱账号上即可

注意使用的是邮件附件 而不是超大附件

第三种 使用Kindle App

Kindle App 是亚马逊开发出的阅读 App,可用于同步我们在亚马逊 Kindle 书城购买中购买的书到各个客户端(Windows、OSX、Android 以及 iOS)

可以看成是App版的Kindle, 除了可以用来看书外, 还可以用来传书

只需登录kindle账号然后直接上传发送即可

image-20210930101514103

第四种 USB传书

简单粗暴, 快捷高效, 这个不用多说, 一根数据线的事

总结

  • EasyChuan网页: 支持电脑和手机, 无需登录, 如果文件不多的话推荐使用该方法
  • USB传书: 文件大小无限制, 如果批量传书推荐该方法

image-20210930101639592

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Vim文本编辑器快速上手操作指南

发表于 2021-09-18

前言

做开发的小伙伴对vim编辑器肯定不陌生, 无论你是使用Linux终端, 还是使用Git操作仓库的时候都经常会碰的上

image-20210918161103435

刚开始接触的时候肯定是感觉非常费劲, 毕竟我们已经习惯了用鼠标定位操作的编辑器

而VIM编辑器, 可以说是纯靠键盘定位和编辑, 你想快速编辑某一处的内容, 鼠标根本帮不了你, 只能依靠键盘

如此反人类的操作, 对于开发者的你来说, 却不得不学

既然如此, 一些常用的操作指令 我们需要掌握

操作指令

  1. 用vim编辑器打开文本文件

    1
    vim 文件名

    打开文件后进入默认模式, 该模式下文本可以查看但不能编辑

    1
    shift+冒号
  2. 进入文本编辑模式

    1
    敲键盘上的字母 i 或者 a
  3. 进入命令输入模式

    1
    敲键盘上的 :
  4. 进入全局可视化模式

    1
    敲键盘上的字母 v
  5. 恢复到默认模式

    1
    敲键盘上的 ESC
  6. 保存文本内容

    命令模式下输入以下字母并且回车:

    1
    2
    3
    w 保存内容
    w <文件路径> 另存为
    saveas 文件路径 另存为
  1. 退出编辑器

    命令模式下输入以下字母并且回车:

    1
    2
    3
    4
    5
    q  退出编辑器
    q! 强制退出编辑器
    wq 保存文本内容 并退出编辑器
    wq! 保存文本内容 并强制退出编辑器
    x 保存文本内容 并退出编辑器
在默认模式下可以进行的操作

默认模式下可以使用键盘上的上下左右键移动光标查看文本内容, 除此之外, 还可以:

  1. 删除内容

    命令 说明
    x 删除游标所在的字符
    X 删除游标所在前一个字符
    Delete 同x
    dd 删除整行
    dj 删除当前行和下一行
    dk 删除当前行和上一行
    dh 删除光标左边的一个字符
    dl 删除光标右边的一个字符
    dw 删除一个单词(不适用中文)
    d$或D 删除至行尾
    d^ 删除至行首
    dG 删除到文档结尾处
    d1G 删至文档首部
    ndd 一次性向下删除n行
  2. 光标移动

    除了使用上下左右键之外还可用字母:

    方向键或者h,j,k,l键可以移动游标。

    按键 说明
    h 左
    l 右(小写L)
    j 下
    k 上
    w 移动到下一个单词
    b 移动到上一个单词
    gg 移动到文本头部
    G 移动到文本末尾
  3. 不同位置插入内容

    命令 说明
    i 在当前光标处进行编辑
    I 在行首插入
    A 在行末插入
    a 在光标后插入编辑
    o 在当前行后插入一个新行
    O 在当前行前插入一个新行
    cw 替换从光标所在位置后到一个单词结尾的字符
  4. 粘贴内容

    1
    p
  5. 撤销操作

    1
    u
  6. 回滚操作

    1
    ctrl+r
  7. 退出编辑器

    1
    shirt+zz
在可视化模式下可以进行的操作

可视化模式下可以快速对内容进行选中, 选中的内容会高亮显示

  1. 选中全部内容

    1
    2
    3
    1. 普通模式下敲gg(把关标定位到最上面)
    2. 普通模式下敲v(进入VISUAL模式)
    3. 然后敲 shift+g(选中整篇文本)
  2. 复制文本全部内容

    选中全部内容后输入以下字符:

    1
    2
    y 复制到vim编辑器中
    +y 复制到系统剪贴板中
  3. 对内容进行格式化

    选中全部内容后输入以下字符:

    1
    =

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

使用docker部署Django项目

发表于 2021-09-18

部署Django项目

  1. 搜索python镜像

    1
    docker search python
  2. 拉取python镜像

    1
    docker pull python
  3. 创建并运行容器

    1
    2
    3
    4
    5
    6
    docker run -id \
    --name=c_django \
    -p 8000:8000 \
    -v /root/app:/root/app
    -h c_django \
    python:latest
  4. 将源程序上传至服务器

    可以使用FTP工具或者scp指令上传 其他也可

  5. 进入程序目录 安装依赖包

    1
    pip install -r requirements.txt
  6. 启动程序

    1
    python manage.py runserver 0.0.0.0:8000
  7. 网站访问

    1
    http://服务器ip:8000

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

记录一次504 Gateway Time-out的解决

发表于 2021-09-18

起因

今早起来, 突然发现网站挂了, 直接报504 Gateway Time-out

image-20210918111428739

经过

我立马联想是否是docker挂了或者数据库容器出了问题

进入终端 使用docker ps 所有容器都在正常运行 没问题, 然后docker logs --tail=10 mysql数据库也没报错

我怀疑是不是docker内部哪里卡住了, 于是systemctl restart docker立马重启docker, 然后重新访问网站 还是不行

有点懵了, 到底哪里出了问题呢? 网上说是Nginx配置问题, 可是我nginx配置一直都没动过, 而且查看nginx容器日志也是正常, 难道是docker容器间通信不正常?

紧接着我又进入nginx容器, 使用nc -zv wordpress 80指令进行容器间通信测试, 也是正常打通的

这问题到底是出在哪了?

难道真的只是超时? 我给的时间太短了不成? 于是乎 我干脆将nginx反向代理超时时间调大, 死马当活马医, 不试试怎么知道呢

我将以下三行配置加入到代理块中:

1
2
3
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;

具体配置如下:

1
2
3
4
5
6
7
8
9
10
11
location /foo {
proxy_pass http://xxx.xxx.xxx.xxx:8080/foo;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
break;
}

然后重启nginx, 这时访问网站 次数504 Gateway Time-out消失了, 换成了Error establishing a database connection

image-20210918111216604

我靠, 原来还是数据库的问题

结果

我开始回忆, 前段时间刚进行docker跨服务器迁移, 昨天旧服务器刚好到期停机, 今天就突然访问不上了, 难道我的程序此时访问的还是原来旧服务器的数据库

对了 我的源码目录是直接从旧服务器拷贝过来的, 虽然docker容器是新建的, 但是因为存在旧目录 所以docker run配置的数据库参数全部无法重写, 也就是说程序配置文件中的数据库连接参数没有被重写

恍然大悟, 立马进入源程序目录找到配置文件打开查看, 果真如此, 然后将其修改为新的

此时重新访问, 网站正常显示

本文为作者原创 转载时请注明出处 谢谢

B站入口

打赏通道

微信公众号二维码如下:

img

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

12…29

乱码三千

android程序员一枚,擅长java,kotlin,python,金融投资,欢迎交流~

286 日志
90 标签
RSS
© 2021 乱码三千
本站总访问量次
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4
0%