目的:

1.基本布局的了解

2.各种布局方法的了解和练习

3.利用xml进行开发

开发思维:

添加控件 9个点 图⽚ 20条线 图片

ImageView显示图片 容器来管理子控件: FrameLayout LinearLayout RelativeLayout ConstraintsLayout

手触摸事件 点亮:取消隐藏

记录密码

具体实施:

获取容器视图:

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ImageView dot =new ImageView(this);

dot.setBackgroundResource(R.drawable.selected_dot);

//创建这个控件对应的坐标位置 LayoutParams

ConstraintLayout.LayoutParams params =new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,

ViewGroup.LayoutParams.WRAP_CONTENT);

//获取背景图片的x,y

ImageView bgImageView = findViewById(R.id.op_view);

int x = (int)bgImageView.getX();

int y = (int)bgImageView.getY();

params.leftMargin =50;

params.topMargin =50;

}

添加控件 9个点 图⽚ 20条线 图片

ImageView显示图片 容器来管理子控件:

public void onWindowFocusChanged(boolean hasFocus) {

//判断是否已经显示

if (hasFocus) {

//获取容器

RelativeLayout rl = findViewById(R.id.root_layout);

//获取背景视图

ImageView iv = findViewById(R.id.op_view);

float scale = getResources().getDisplayMetrics().density;

//获取 x 和 y坐标

int x = iv.getLeft();

int y = iv.getTop();

创建横线6条

for (int i = 0; i < 2; i++) {

for (int j = 0; j < 3; j++) {

//创建一个视图用于显示线

ImageView lineView = new ImageView(this);

//设置图片

lineView.setBackgroundResource(R.drawable.normal_highlight1);

//创建布局参数

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams

(ViewGroup.LayoutParams.WRAP_CONTENT,

ViewGroup.LayoutParams.WRAP_CONTENT);

params.leftMargin = (int)(x + 46.6*scale) +(int)(99*scale*i);

params.topMargin = (int)(y + 170*scale)+(int)(99*scale*j);

rl.addView(lineView, params);

}

}

创建竖线6条

for (int i = 0; i < 2; i++) {

for (int j = 0; j < 3; j++) {

//创建一个视图用于显示线

ImageView lineView = new ImageView(this);

//设置图片

lineView.setBackgroundResource(R.drawable.normal_highlight2);

//创建布局参数

RelativeLayout.LayoutParams params

= new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,

ViewGroup.LayoutParams.WRAP_CONTENT);

params.leftMargin = (int)(x + 42*scale) +(int)(99*scale*j);

params.topMargin = (int)(y + 170*scale)+(int)(99*scale*i);

rl.addView(lineView, params);

}

}

创建斜线

for (int i = 0; i < 2; i++) {

for (int j = 0; j < 2; j++) {

//创建一个视图用于显示线

ImageView lineView = new ImageView(this);

//设置图片

lineView.setBackgroundResource(R.drawable.normal_highlight3);

//创建布局参数

RelativeLayout.LayoutParams params

= new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,

ViewGroup.LayoutParams.WRAP_CONTENT);

params.leftMargin = (int)(x + 42*scale) +(int)(99*scale*i);

params.topMargin = (int)(y + 170*scale)+(int)(99*scale*j);

rl.addView(lineView, params);

ImageView lLineView = new ImageView(this);

lLineView.setBackgroundResource(R.drawable.normal_highlight4);

params.leftMargin = (int)(x + 53.3*scale) +(int)(99*scale*i);

params.topMargin = (int)(y + 170*scale)+(int)(99*scale*j);

rl.addView(lLineView,params);

}

}

创建用于显示点的视图

for (int i = 0; i < 3; i++) {

for (int j = 0; j < 3; j++) {

//创建用于显示点的视图

ImageView dotView = new ImageView(this);

//隐藏视图

dotView.setVisibility(View.VISIBLE);

dotView.setBackgroundResource(R.drawable.selected_dot);

//创建控件的尺寸

RelativeLayout.LayoutParams params

= new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,

ViewGroup.LayoutParams.WRAP_CONTENT);

params.leftMargin = (int)(x + 35*scale) +(int)(99*scale*i);

params.topMargin = (int)(y + 162*scale)+(int)(99*scale*j);

//将子控件添加到容器中

rl.addView(dotView, params);

}

}

}

}

还有手触摸事件,记录密码。

小结:

东西很多,各种布局了解下来,就感觉大脑快装满了。尤其是算位置的时候很是焦灼(泪奔),强行理解(勉强过关)。在弄完一组控件添加之后,后面的控件添加就简单了,以为思路清晰了,就快。很期待,将完整的demo写出来。

android studio 触摸锁,学习AndroidStudio布局,并编写一个图案解锁demo相关推荐

  1. android获取其他app布局,Android Studio查看其它APP的布局结构

    概述 日常使用别家的APP过程中,会遇到一些比较好看的布局,这时候我们就想学习一下别人的布局结构,以便参考. (1)手机连接电脑.设置手机为USB调试模式 (2)运行Android Studio,打开 ...

  2. Android Studio 工具窗口浮动与布局恢复【申明:来源于网络】

    Android Studio 工具窗口浮动与布局恢复[申明:来源于网络] http://bbs.chinaunix.net/thread-4182438-1-1.html 转载于:https://ww ...

  3. Android Studio下载搭建学习笔记01

    Android Studio下载搭建学习笔记01 下载Android Studio 安装Android Studio 进入安装向导 选择安装组件 选择安装位置 选择文件菜单 等待安装 启动并配置And ...

  4. android listview 删除出错,Android Studio,删除ListView项目而不影响另一个项目

    我正在做一个ToDo List并且在从ListView中删除一个项目时遇到麻烦.Android Studio,删除ListView项目而不影响另一个项目 如果用户已经做到了名单上的一件事,他可以点击该 ...

  5. Android studio三周学习总结

    因为疫情我们在线上已经进行了三个周的网课学习, 这半个月一直在学习Android方面的知识,对Android开发有了一个基本的认识,学会了Android studio的基本操作.刚开始接触Androi ...

  6. android studio val,Kotlin学习笔记之const val与val

    const的使用 const 必须修饰val const 只允许在top-level级别和object中声明,使用方式如下: const val THOUSAND = 1000 object myOb ...

  7. Android Studio xml文件中的布局预览视图

    操作系统:Windows 10 x64 IDE:Android Studio 3.3.1 更新了Android Studio之后,xml文件中的布局预览视图变得如此简洁! 原因是没有勾选Show La ...

  8. android studio 新建工程慢,关于AndroidStudio新建与编译项目速度慢解决办法

    android第一次新建项目是,相关依赖包需要下载很久,至少半小时,因为网速问题,还会多次下载失败. 解决办法如下: 1.通过镜像将gradle-5.4.1-all.zip下载到本地:解压到文件夹:D ...

  9. android studio自定义类,为AndroidStudio设置自定义类注释

    我们在使用eclipse的时候,只要在类上面输入/**再按enter,就会出现类注释. package com.demo; /** * * @author chenjunxu * */ public ...

最新文章

  1. jyphon 环境变量配置
  2. apache kafka_使用Apache Kafka,Kubernetes和Envoy,Istio,Linkerd的服务网格和云原生微服务...
  3. esp32 怎么分配freertos 堆栈大小_深度解剖~ FreeRtos阅读笔记2 任务创建、内核链表初始化...
  4. 在 Delphi 下使用 DirectSound (14): 测试镶边效果器 IDirectSoundFXFlanger8
  5. IDEA远程连接mysq数据库
  6. WORD如何缩小编号与文本之间的距离?
  7. 使用maven启动web项目报错
  8. 阿里云docker提交及删除入门操作
  9. 自主创业一年,自己总结了5个创业心得
  10. 论文参考文献一定要在文中标注吗?
  11. MacOS程序和库签名的问题
  12. 用java写新年快乐特效代码_蓝叶分享新年快乐大红灯笼特效代码
  13. 浅谈,如何获取MTK CPU信息 请看我是如何做的。一步步来吧
  14. Hibernate占位符?和:及JPA占位符
  15. 基于WPS开放平台 WPS文件转PDF开发指南
  16. android 12去掉屏幕锁屏(屏幕默认锁屏方式改成无)
  17. tar 命令打包压缩tar.gz,不包含当前文件夹路径
  18. android蓝牙实验,Experiment6蓝牙Android开发实验指导书.doc
  19. linux服务生产环境启动报错
  20. 返回一个整数的反序数函数

热门文章

  1. 字符串处理函数和函数
  2. mybatis分页数据重复
  3. Jmeter(三)断言和关联
  4. python测试报告
  5. 桦仔 笔记3-徐 设置数据库自动增长注意要点
  6. MAC 下使用ipv6、ipv4观看电视、网络电视
  7. sqlserver 查询一个表的所有字段代码
  8. Flutter AlertDialog弹框的基本使用、Flutter showDialog方法使用概述
  9. Flutter 开发应用第一个页面
  10. 原生js---ajax---post方法传数据