android studio按坐标布局,Android studio一个手势锁的界面布局
目的:完成一个手势锁的界面布局,对Relative,Contains等布局进行简单的使用,onWindowFocusChanged进行一定的熟练。大概来说,就是增加对界面布局的了解。
技术:(1)简单的RelativeLayout布局
(2)简单的onWindowFocusChanged的使用
(3)内部类Layout的使用
(4)简单视图方法
效果:
效果.jpg
代码:
这是我们的源代码
package ly.pxd.mtext;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//读取XML的,系统自带不用管
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
//当Activity的当前Window获得或失去焦点时会被回调此方法。
// 当回调了这个方法时表示Activity是完全对用户可见的,即是真正的界面构建完成了。
// 当对话框弹起/消失及Activity新创建及回退等都会调用此方法。
//相比之下,onResume()方法更多的是指Activity进入了可见的状态,并不是真正的界面构
// 建完成了,因此获得手机界面的高度和宽度用这个方法比较好。
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {//判断是否已经显示
RelativeLayout mtemp1 = findViewById(R.id.fir_iv);
//一个视图链接我们主视图的ID
ImageView mtemp2 = findViewById(R.id.thr_iv);
//得到我们所需操作界面
float mscale = getResources().getDisplayMetrics().density;
//得到我们手机的分辨率
int x = (int) mtemp2.getX();
int y = (int) mtemp2.getY();
//这个界面的坐标
for (int i = 0; i < 2; i++)//竖线
for (int j = 0; j < 3; j++) {
ImageView mtemp3 = new ImageView(this);
mtemp3.setBackgroundResource(R.drawable.normal_highlight2);
RelativeLayout.LayoutParams temp = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
temp.leftMargin = (int) (x + 42 * mscale) + (int) (99 * mscale) * j;
temp.topMargin = (int) (y + 170 * mscale) + (int) (99 * mscale) * i;
mtemp1.addView(mtemp3, temp);
}
for (int i = 0; i < 2; i++)//一个循环,因为我们的这个界面要求6
// 个这种控件
for (int j = 0; j < 3; j++) {
ImageView mtemp3 = new ImageView(this);
//一个新的视图,它的环境在我们的MainActivity
mtemp3.setBackgroundResource(R.drawable.normal_highlight1);
//背景环境资源
RelativeLayout.LayoutParams temp = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);//一个控件的尺寸,定义时要表示出它的宽高
temp.leftMargin = (int) (x + 42 * mscale) + (int) (99 * mscale) * i;
temp.topMargin = (int) (y + 170 * mscale) + (int) (99 * mscale) * j;
mtemp1.addView(mtemp3, temp);
}
for (int i = 0; i < 2; i++)//左斜线
for (int j = 0; j < 2; j++) {
ImageView mtemp3 = new ImageView(this);
mtemp3.setBackgroundResource(R.drawable.normal_highlight3);
RelativeLayout.LayoutParams temp = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
temp.leftMargin = (int) (x + 42 * mscale) + (int) (99 * mscale) * i;
temp.topMargin = (int) (y + 170 * mscale) + (int) (99 * mscale) * j;
mtemp1.addView(mtemp3, temp);
}
for (int i = 0; i < 2; i++)//右斜线
for (int j = 0; j < 2; j++) {
ImageView mtemp3 = new ImageView(this);
mtemp3.setBackgroundResource(R.drawable.normal_highlight4);
RelativeLayout.LayoutParams temp = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
temp.leftMargin = (int) (x + 50 * mscale) + (int) (99 * mscale) * i;
temp.topMargin = (int) (y + 170 * mscale) + (int) (99 * mscale) * j;
mtemp1.addView(mtemp3, temp);
}
for (int i = 0; i < 3; i++)//右斜线
for (int j = 0; j < 3; j++) {
ImageView mtemp3 = new ImageView(this);
mtemp3.setBackgroundResource(R.drawable.selected_dot);
RelativeLayout.LayoutParams temp = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
temp.leftMargin = (int) (x + 35 * mscale) + (int) (99 * mscale) * i;
temp.topMargin = (int) (y + 165* mscale) + (int) (99 * mscale) * j;
mtemp1.addView(mtemp3, temp);
}
}
}
//这下面是我的一些随笔可看可不看
//view是所有视图的父类,只有最基本的功能
//线性布局默认是横向的
//改容器所有控件都会改变,所以只想改一个控件的话,要单独改这个控件
//background背景颜色
//线性布局的方向:orientation方法(也可能是类)里的
// Vertical纵向
// horizontal横向
//layout 有左右Left Right 与开始结束 Start End的Margin边距,注意开始结束是相对这个控件而言的(对于相邻的控件或者手机边距)
//上边距 Top 下边距 Button
// 外间距 既然View里面都能用
//那......所有布局都有(所有的布局类里面,包括控件)应为所有的布局类都维护一个LayoutParams
//padding是一个控件与自己内容位置的关系 内间距
//权重按比例分配,layout_weight值越小越重要
//线性布局,没有交叉
//相对布局,在Margin_layout的基础上添加了对齐,layout_align(上下左右),两个控件采用一个设置id一个调用方法的方式也是一种方法
//margin_horizontal="大小" 横向对齐的基础上,移动多少
//center_horizontal=中间的基础上横向对齐
//constraint(上下左右)相对大小,设置的默认大小为0不知道不为0时会怎样,应该会失败吧(特有方法)androidx.constraintlayout.widget.ConstraintLayout
//constraintDimensionRatio(h/w,?:?)的用法不是太清楚高宽比或者宽高比,后面的为前面那个高或者宽
//要试一试
//align是什么?
//资源图片的名称,必须a-z,0-9或者下划线
//scaleType里面用fitXY进行拉伸
//R-values-style-noActionbar不要标题栏
//一个Imageview对象下的setbackgroudResource()方法是什么?
//坐标的获取......onWindowFocusChanged
//控件是矩形的
// RelativeLayout mfirst=findViewById(R.id.fir_iv);
//ImageView temp=new ImageView(this);
//创建了一个视图,
//temp.setBackgroundResource(R.drawable.selected_dot);
//设置视图背景资源
//一个控件的尺寸,只是尺寸
//RelativeLayout.LayoutParams templocation=new RelativeLayout.LayoutParams(
// ViewGroup.LayoutParams.WRAP_CONTENT,
// ViewGroup.LayoutParams.WRAP_CONTENT);
//这个类是内部静态类,每个布局都有的,一般
//这个方法怎么用的,我的理解是,每个布局都有其特有的LayoutParams方法,其创建这个对
// 象时需要给予两个参数,大小,一个横一个纵宽高,就是宽高......可能不是,去查查
//getlocalVisibleRect......一些找坐标的方法
//安卓 在容器中添加的控件需要被window计算
//Viewgroup的意义?
//Constraint里面那个对齐方法会调整边框大小
//重写onWindowFocusChanged这个方法,因为它会在所有子控件测量好后调用,不过这个方法好像会调用多次,占内存
//addView(?,?)第一个参数是我们要加入的视图,第二个是以怎样的尺寸去添加这个视图
//get可以上下左右,而且可以得到宽高
//真正的图片要用另一个方法
//不同的屏幕分辨率不一样,显示同一张图片的大小不同
//什么是屏幕的密度?嗯,,,,,分辨率?嗯。
//float fentemp=getResources().getDisplayMetrics().density;
// System.out.println(fentemp);//得到拉伸尺寸
//x,y超出了图片的范围会闪屏,,昨天那个程序的问题
//setVisibility设置隐藏性
//onTouchEvent方法,来实现点亮功能
}
xml文件
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:id="@+id/fir_iv">
android:id="@+id/sec_iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/main_bg"
android:scaleType="fitXY"/>
android:id="@+id/thr_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/op_bg"
android:layout_centerInParent="true"/>
没有要标题栏,在res-values-style里面进行了一些修改
@color/colorPrimary
@color/colorPrimaryDark
@color/colorAccent
这是这里要用到的图片,很简单的一个程序,嗯,不看我随笔的话挺短的,而且那几个循环都是一样的原理,理解一个就行了的:
main_bg.png
normal_highlight1.png
normal_highlight2.png
normal_highlight3.png
normal_highlight4.png
op_bg.png
selected_dot.png
wrong_dot.png
wrong_highlight1.png
wrong_highlight2.png
wrong_highlight3.png
wrong_highlight4.png
感悟:万事开头难吧,在最近的学习中确实有很多的新东西,不过,谁让我决定学了呢。既然做了决定而且自己又有能力去学好,就不应该放弃呀。浮云落霞日悠悠,画池鳞影月空空。伊盼君归心无忧,君归已然青云楼。
android studio按坐标布局,Android studio一个手势锁的界面布局相关推荐
- android touch事件坐标原点,Android – 捏缩放ontouch事件坐标
我正在尝试获取我正在创建的 Android应用程序的画布坐标.它很有用,直到我添加代码以使用缩放焦点(以下两行): scalePoint.setX((int) detector.getFocusX() ...
- android 屏幕中心坐标原点,Android 的坐标系及矩阵变换
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Android的坐标系 2D坐标系 android的2d坐标系如图所示,水平向右为X轴正方向,竖直向下为Y轴正方向,原点 ...
- android touch事件坐标原点,Android onTouch事件与手势操作
触摸,手势操作已经很好的融入了我们的生活.那么Android开发中触摸事件要如何捕捉?如何处理?如何识别手势?事件的传递机制又是怎么样的?下面我们将通过一个小例子来进行这方面的学习. 先看效果图 如上 ...
- android 模拟gps坐标,1020. Android GPS定位欺骗(模拟定位)的3类途径4种方式
前段时间发布的手游PokemonGo相信大家都有耳闻,而因为这个游戏在国内的坐标遭到了封锁,很多科学游戏方法也陆续涌现.好不热闹. 那其实,PokemonGo最初的版本,在大陆是可以通过简单的vpn+ ...
- android地图获取坐标位置,android 百度地图 根据得到的经纬度 获取位置信息
满意答案 回复了sfdzyy 2015.07.03 采纳率:57% 等级:7 已帮助:658人 private GeoCoder mSearch = null; // 搜索模块 // 初始化搜索 ...
- gridlayout布局单元格宽度设置_安卓界面布局之线性布局
Android中有六大布局,分别是: LinearLayout(线性布局),RelativeLayout(相对布局),TableLayout(表格布局) .FrameLayout(帧布局),Absol ...
- Android常见界面布局
第2章 Android常见界面布局 第2章 Android常见界面布局 2.1 View视图 2.2 界面布局编写方式 2.2.1 在XML文件中编写布局 2.2.2 在Java代码中编写布局 2.3 ...
- Android 常用界面布局
android-studio-2020.3.1.25-windows安装包 链接:https://pan.baidu.com/s/19SgimjO3OJmkA2mHjfrXvw 提取码:pt0d 实验 ...
- android 无网络处理布局,Android网络开发
1. WebView用法 ①布局文件新建一个WebView,特别注意线性布局和控件的宽高都要匹配父控件 xmlns:tools="http://schemas.android.com/too ...
最新文章
- 提升 NLP 实战技能的一点建议
- 一个完整的python项目源码-一个Python开源项目-哈勃沙箱源码剖析(下)
- 云端飘 String s=new String(abc)创建了几个对象?
- ajax文件上传报400,js ajaxfileupload.js上传报错的解决方法
- 怎样使用My97日期控件
- python初学者用什么编辑器好_新人学 python 选什么编辑器比较好呢??
- 科大奥锐实验报告霍尔效应_大学物理实验报告系列之霍尔效应
- python吃显卡还是内存条_玩天际线吃U还是吃显卡或者还是吃内存?--天际线配置需求个人见解...
- c# mysql 连接
- “语音识别”服务人类
- 2017-2018-20155336 《信息安全系统设计基础》第六周学习总结
- 解决树莓派中文显示框框乱码
- 如何写项目方案--从资料准备到书写技巧
- java代码餐馆管理系统_java版餐饮管理系统
- 养肾=养命!这7个最伤肾的行为你犯了吗?程序员收藏
- Android 原生Gallery3d的优化系列--1
- JSP内置对象Session——setAttribute/getAttibute/removeAttribute
- flutter-Decoration
- ALEVEL经济学:通货膨胀的原因是什么?
- Streambox Ripper的问题