API Demo Snake代码分析一 FrameLayout新的认识

Android自定义View(三) Matrix的原理解析 Matrix的中文是矩阵的意思,在Android中它起着坐标映射、变换的功能。意思就是说我们在自定义view的时候,有时需要对图表进行缩放、旋转、转移、错切等操作,就需要对图表的坐标进行一定的转换,此时就是Matrix在后台起着转换的作用。Matrix是一个3x3的矩阵,大概长成下面那样子,如图: 先举个例子,为什么要用Matrix进行坐标转换,比如通过Matrix对点A围绕原点旋转30°,... 阅读详情

以前写界面的布局主要用的是LinearLayout和RelativeLayout,其他的就用的很少了,今天在看之前参照api demo中Snake的例子写的程序,看到他唯一的那个界面就是用FrameLayout写的,之前也一直对FrameLayout不甚了解,今天认真总结一下。下面是API中的解释

FrameLayout is designed to block out an area on the screen to display a single item. You can add multiple children to a FrameLayout and control their position within the FrameLayout usinggravity. Children are drawn in a stack, with the most recently added child on top. The size of the frame layout is the size of its largest child (plus padding), visible or not (if the FrameLayout's parent permits). Views that are GONE are used for sizing only if setConsiderGoneChildrenWhenMeasuring() is set to true.

主要的关键点是:在FrameLayout里面要想设置子控件的布局要使用gravity;子控件都在一个栈里面进行绘画,最近添加的子空间在最上面;整个FrameLayout的大小是和最大的子空间一样大的。

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
  xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" > 
 
    <ImageView 
        android:id="@+id/image" 
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent" 
        android:scaleType="center" 
        android:src="@drawable/candle" 
        /> 
    <TextView 
        android:id="@+id/text1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center" 
        android:textColor="#00ff00" 
        android:text="@string/hello" 
        /> 
    <Button 
        android:id="@+id/start" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="bottom" 
        android:text="Start" 
        /> 
</FrameLayout>

在apidemo中的布局如下:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@+id/frameLayout1"
	android:layout_width="fill_parent" android:layout_height="fill_parent"
	xmlns:android="http://schemas.android.com/apk/res/android">

	<com.gao.apidemo.snake.SnakeView
		android:id="@+id/snake" android:layout_width="fill_parent"
		android:layout_height="fill_parent" tileSize="24" />
	<RelativeLayout android:id="@+id/relativeLayout1"
		android:layout_width="fill_parent" android:layout_height="fill_parent">
		<TextView android:layout_height="wrap_content" android:id="@+id/textView"
			android:layout_centerInParent="true" android:layout_width="wrap_content"
			android:text="TextView" android:textColor="#ff8888ff"
			android:textSize="24sp" android:gravity="center_horizontal"></TextView>
	</RelativeLayout>  
</FrameLayout>

完全可以写成如下的形式,效果是一样的:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@+id/frameLayout1"
	android:layout_width="fill_parent" android:layout_height="fill_parent"
	xmlns:android="http://schemas.android.com/apk/res/android">

	<com.gao.apidemo.snake.SnakeView
		android:id="@+id/snake" android:layout_width="fill_parent"
		android:layout_height="fill_parent" tileSize="24" />
	<TextView android:layout_height="fill_parent" android:id="@+id/textView"
			android:gravity="center" android:layout_width="fill_parent"
			android:text="TextView" android:textColor="#ff8888ff"
			android:textSize="24sp" />
</FrameLayout>

可以看到这个textview是覆盖在上面了,上层的TextView对下层的View完全是透明的,而且可以照常的点击,给人的感觉就是加了一个现实文字的透明的图层一样,对下层没有影响。

转载:http://gundumw100.iteye.com/blog/1059685  使用FrameLayout实现遮罩层

利用FrameLayout的特性,可以实现一个简单的遮罩层.


<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/layout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
        <LinearLayout
		    android:orientation="vertical"
		    android:layout_width="fill_parent"
		    android:layout_height="fill_parent"
		    >
	        <Button
	           android:id="@+id/btn"
	           android:layout_width="wrap_content"
	           android:layout_height="wrap_content"
	           android:layout_alignParentRight="true"
	           android:text="show"
	           />
			<TextView  
			    android:layout_width="fill_parent" 
			    android:layout_height="wrap_content" 
			    android:text="@string/hello"
			    />
			<EditText android:layout_width="fill_parent" 
			    android:layout_height="wrap_content" 
			    android:text="Mask"
			    />
		</LinearLayout>
</FrameLayout>
package com.ql.app;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.TextView;

public class App extends Activity {

	private boolean isMask = true;

	private FrameLayout layout = null;
	private Button btn = null;
	private TextView textView = null;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.main);

		initViews();
	}

	private void initViews() {

		layout = (FrameLayout) findViewById(R.id.layout);
		btn = (Button) findViewById(R.id.btn);
		btn.setOnClickListener(new MaskListener());

	}

	// 按钮监听,显示/隐藏遮罩
	private class MaskListener implements OnClickListener {
		public void onClick(View v) {
			if (isMask) {
				if(textView==null){
					textView = new TextView(App.this);
					textView.setTextColor(Color.BLUE);
					textView.setTextSize(20);
					textView.setText("I am a mask.");
					textView.setGravity(Gravity.CENTER);
					textView.setLayoutParams(new ViewGroup.LayoutParams(
							ViewGroup.LayoutParams.FILL_PARENT,
							ViewGroup.LayoutParams.FILL_PARENT));
					textView.setBackgroundColor(Color.parseColor("#33FFFFFF"));
				}
				btn.setText("show");
				isMask = false;
				layout.addView(textView);
			} else {
				btn.setText("hide");
				isMask = true;
				layout.removeView(textView);
			}
		}
	}
}

备注一:

看了这几个例子给我的感觉就是FrameLayout主要用在层与层之间的重叠布局,一个布局在另一个布局之上的什么位置

Yolov2 训练时anchor是如何使用的?build_target 0.简略描述 1.将真值检测框变换到特征图尺度上 2.计算以特征图每个网格中心为中心点时所有锚框与真值检测框的交并比 3.取与真值检测框交并比最大的锚框的id,及真值检测框中心所在cell的id,有此,可将真值检测框与预测结果对应起来 4.计算位置回归损失,置信度损失,分类损失 1,网络的输出 图1 yolov2 网络对于检测框位置大小的输出是: 对于1个batch网络的输出的shape为[batch_size, H*W*num_anchors, 5+num_classes], 其中: num_ 阅读详情

相关推荐

手把手教你用Logisim搞定华科计组实验:单总线CPU硬布线控制器设计(含Excel自动生成电路技巧)

本文详细解析了如何使用Logisim完成华科计组实验中的单总线CPU硬布线控制器设计,特别分享了利用Excel自动生成电路逻辑的高效技巧。从实验准备、状态机表格填写到模块化构建和系统联调,提供全流程实战指导,帮助读者快速掌握计算机组成原理核心概念,大幅提升实验效率。

weixin_28744423的博客 321

java贪吃蛇详解_Java实现贪吃蛇小游戏(附完整源码)

今天我就从零开始来完成这个小游戏,完成的方式也是一步一步的添加功能这样的方式来实现。第一步完成的功能:写一个界面大家见到的贪吃蛇小游戏,界面肯定是少不了的。因此,第一步就是写一个小界面。第二步完成的功能:在界面上画成一格一格的我们见过的贪吃蛇游戏,是有一个格子一个格子构成,然后蛇在这个里面运动。重写paint方法,单元格就是横着画几条线竖着画几条线即可。代码如下:效果如下:第三步完成的功能:建立另...

weixin_33309848的博客 1500

给大一新生的蓝桥杯EDA备赛规划:从电路分析到立创EDA,如何用一年时间高效备赛?

本文为大一新生提供了一份系统的蓝桥杯EDA备赛规划,从电路分析基础到立创EDA实战操作,分阶段指导如何高效备赛。内容涵盖理论学习、软件操作、PCB设计专项提升及冲刺优化策略,帮助学生在一年内全面提升电子设计能力,为竞赛做好充分准备。

weixin_31476015的博客 287

贪吃蛇程序(全文注释)

前两天在网上下载一个贪吃蛇的程序(感谢写程序的那个人),用Java写的,但是没有注释,在网上查了查,只是有其中一小部分的注释,作为一名刚入门的新手,这个程序拿到手有些看不懂,我知道这个贪吃蛇的程序对我们新手来说是一个很好的学习程序,经过两天的查询JDK文档后,我用个人的理解方式把程序几乎全文注释一遍,希望自己能加深印象,我知道这个程序文档注释有不对和不全面的地方,所以发到园子,期望能有老师多多...

mylove 1387

给STM32供电,别只接VDD和GND!VBAT、VDDA这些引脚不接会怎样?

本文深入解析STM32电源设计中VBAT与VDDA引脚的关键作用,揭示仅连接VDD和GND可能导致的ADC精度下降、RTC功能异常等问题。通过实测数据对比不同连接方案,提供包括滤波电路设计、PCB布局布线和双电源自动切换在内的实用解决方案,帮助开发者优化系统稳定性与性能。

weixin_30521161的博客 629

告别CPU空转!用STC8的SPI+DMA高效驱动上百颗WS2812B灯珠

本文详细解析了如何利用STC8单片机的SPI+DMA外设高效驱动WS2812B全彩灯珠,解决传统软件延时驱动方式在长灯带应用中的性能瓶颈。通过硬件方案设计、数据格式转换和DMA传输配置,实现高达400Hz的刷新率和低于5%的CPU占用率,适用于大规模灯光项目。

weixin_30847939的博客 396

Android五种布局管理器之『FrameLayout』

http://www.sunchis.com/html/android/devolop/2011/0424/318.html     帧布局(FrameLayout)在屏幕上开辟了一块区域,在这块区域中可以添加多个子控件,但是所有的子控件都会被对齐到屏幕的左上角。帧布局的大小由其下属子控件中尺寸最大的那个子控 …… 帧布局(FrameLayout)在屏幕上开辟了一块区域,在这块

入凡尘笔录 992

TTL电路搭建半加器实验:操作指南完整版

通过TTL电路搭建半加器,详解逻辑设计与实验步骤,帮助掌握数字电路中的半加器工作原理与实际应用,适合电子技术初学者动手实践。

weixin_42524864的博客 355

android matrix 图像 平移边界,使用Matrix平移图像

1、布局文件android:id="@+id/frameLayout1"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" >2、MainActivitypublic class MainActivity extends Activity {@O...

weixin_42513602的博客 540

购物车智能检测系统:YOLO26 + PyQt5 毕设实现

YOLO26 + PyQt5 完成购物车商品检测系统:标注数据集(OpenImages 筛选 + 自制 500 张),训练 100 epoch 得到 mAP50 约 0.89,集成商品定价后输出总价。建议先用 OpenImages 预训练权重在自制数据上调优(冻住 backbone 前 50 epoch),等 loss 稳定后再解冻全量训练。

m0_64661770的博客 56

本地玩转AI还得靠这个,SillyTavern(酒馆)到底有多强?

SillyTavern是一款本地运行的LLM交互前端,支持文本生成、图像生成、语音合成等功能。它最初是TavernAI的分支,现已独立开发,社区活跃,功能更新频繁。SillyTavern通过前端UI和插件系统连接各种大模型后端,如OpenAI、KoboldAI等,用户可以在本地创建“虚拟酒馆”与各种角色对话。其功能亮点包括角色卡、角色记忆、世界设定、多人聊天室、自定义UI和行为脚本、插件扩展支持等。SillyTavern适合AI创作用户、AI工程师、LLM爱好者和AIGC创作者。它有两个维护分支:relea

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 8037

Folia 歌词接口实战:lia.lines 把当前歌词搬上 QuickShell 顶栏,设置只做一次

在 omarchy 4 桌面前听歌,Folia 窗口一最小化,歌词就跟着"失联"了。给 Folia 接上官方 QuickShell 插件 lia.lines 之后,当前播放的歌词会常驻在顶部状态栏里逐行滚动,还能直接在顶栏暂停、播放;Folia 没在放歌时,它降级为一个简易 MPRIS 媒体信息组件,顶栏不空窗。这件事只需要在设置里拨一个开关、在插件市场装一个插件,改动一次,长期生效。 ## 效

gitblog_00550的博客 384

微搭低代码实现用户登录及注册功能

在小程序开发中,我们可以拿到微信用户的openid,openid可以作为用户的唯一标识,在查询数据的时候可以进行数据过滤实现查询自己提交的数据。那微搭中是否也有openid这个概念,可以获取用户自己提交的数据呢? 答案是肯定的,那要怎么去做呢?思路是先创建一个数据源方法,在数据源中返回openid,然后低代码中可以调用数据源的方法并且赋值给全局变量,这样在后续的业务中从全局变量就可以获取openid了,方便做数据权限的控制。 为了实现这个目的,我们从创建数据源开始。 创建数据源 我们先创建一个用户管理的数据

低代码布道师的博客 3000

自定义各种角度的Framlayout

package com.neldtv.mips.utils; import com.neldtv.mips.R; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Matrix; import

jiazzzzzz的专栏 6481

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

基于Android FrameLayout的使用详解

http://www.jb51.net/article/37101.htm 今天在学习实现墨迹天气那样的拖动效果时,看到用的是重写FrameLayout。翻了翻书,突然想明白,为什么用FrameLayout. 在FrameLayout中,用我看的书中的话说是,空间永远用不完。 复制代码 代码如下: xmlns:android="http://schemas.androi

danming60520的专栏 3241

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android UI布局之FrameLayout

一个FrameLayout对象就好比一块屏幕上提前预定好的空白区域,然后可以填充一些元素到里边,比方说一张图片等。需要注意的是,所有的元素都被放置在FrameLayout区域最左边上的区域。而且无法为这些元素指定一个确切的位置。如果一个FrameLayout里边有多个子元素,那么后边的子元素的显示会重叠在前一个元素上。 实例:LayoutDemo 运行效果: 代码清单: 布局文

4296

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

安卓杂记(二)利用FrameLayout叠加多种view的方法

一.FrameLayout介绍: FrameLayout是五大布局中最简单的一个布局,在这个布局中,整个界面被当成一块空白备用区域,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡。 1.在FrameLayout中添加普通的View 在FrameLayout中可以添加诸如imageView和TextVi

jsc9410的专栏 7050

Android Paint的使用详解

尊重原创,转载请标明出处    http://blog.youkuaiyun.com/abcdef314159 自定义控件具有很强的灵活性,可以根据你的想法画出各种各样的图案,在Android中如果是自定义控件的话,Paint这个类用的还是较多的,这一篇就来简单介绍Paint这个类的使用,先来看一下这个类的注释/** * The Paint class holds the style and color

数据结构和算法 6万+

Android上面TreeView效果

<br />       应该说很多的操作系统上面都提供了TreeView空间,实现树形结构,这个树形结构的应用时很广泛的,而Google开发Android的时候出于Android手机是触摸屏幕的考虑,用手指操作树形结构很不方便,从这方面考虑没有提供TreeView的空间,而是只是提供了一个ExpandableListView:android中的二级树型Widget,虽然已经能满足不少的功能需求,例如书签的功能就可以使用这个控件,但是随着应用的不断增多这个就不能满足要求了,例如pdf中左侧的目录的功能,就需

GaoMatrix的专栏 2万+

Activity调用finish却不立即执行onDestory

遇到一个奇怪的问题,我将打开的Activity放在一个栈里面进行管理,然后当我要关闭所有的Activity的时候 public void CloseAllActivity(){ if(activityStack==null)return; while(true){

GaoMatrix的专栏 1万+

在Release版本中如何关闭Debug版本中的log

之前在程序中有打了很多的log,当初打log的方式也没有统一,删掉肯定不行,统一修改也挺麻烦的。今天在stackoverflow上面看到有对这个的讨论 主要有以下三种方式关闭log信息http://stackoverflow.com/questions/2446248/deactivate-any-calls-to-log-before-publishing-are-there-tools-to

GaoMatrix的专栏 1万+

PopMenu效果的学习

看到很多的程序里面都用了PopMenu的效果,给人的体验非常好,今天也学着做了一个,效果如下:PopMenu.javapublic class PopMenu extends Activity { private int SCREEN_WIDTH; private int SCREEN_HEIGHT; private final static int MENU_CREATE_DIRECTORY = 0; private final static int MENU_CREATE_FILE =

GaoMatrix的专栏 1万+

Android连接远程服务器

02-17 03:46:53.844: WARN/System.err(717): org.apache.http.conn.HttpHostConnectException: Connection to http://127.0.0.1:8080 refused 02-17 03:46:53.894: WARN/System.err(717): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(

GaoMatrix的专栏 9747

Android Path 使用

项目中经常会用到绘图方面的知识,之前一直对Path这个类的使用不是很清楚,现在系统的使用和总结一下。首先看一下API中的解释: The Path class encapsulates compound (multiple contour) geometric paths consisting of straight line segments, quadratic curves, and cub

GaoMatrix的专栏 9556

todolist自定义界面

这是学习Android2高级编程上面的一个例子,效果图如下: public class ToDoList extends Activity { private EditText mEditText; private ListView mListView; priv

GaoMatrix的专栏 8088
上一篇: Android Jamendo开源在线音乐播放器源码分析六 对com.teleca.jamendo.api和com.teleca.jamendo.api.impl类的分析
下一篇: API Demo Snake代码分析二 onSaveInstanceState和onRestoreInstanceState分析
GaoJava08
博客等级 码龄18年 201粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值