Android-FrameLayout(帧布局)

Android 创建桌面组件Widget——构建应用微件(一) 用户可以在其主屏幕面板间移动微件,如果系统支持,用户还可以调整微件的大小,按照他们的偏好量身定制微件中的信息量。定义应用微件的初始布局,在 XML 中定义。这是一个可选的 Activity,在用户添加您的应用微件时启动,并允许用户在应用微件创建时修改其设置。定义应用微件的基本特性,如应用微件的最小布局尺寸、应用微件的初始布局资源、应用微件的更新频率,以及(可选)在应用微件创建时启动的配置。与控制微件的互动不一定会转到关联的详情视图,具体取决于控制微件的功能是否生成了数据集(例如,在使用搜索微件时)。 阅读详情

FrameLayout(帧布局)

常用属性
android:foreground:*设置改帧布局容器的前景图像
android:foregroundGravity:设置前景图像显示的位置

1)最简单的例子
代码:

<TextView    
    android:layout_width="200dp"    
    android:layout_height="200dp"    
    android:background="#FF6143" />    
<TextView    
    android:layout_width="150dp"    
    android:layout_height="150dp"    
    android:background="#7BFE00" />    
 <TextView    
    android:layout_width="100dp"    
    android:layout_height="100dp"    
    android:background="#FFFF00" />    
代码解析: 很简单,三个TextView设置不同大小与背景色,依次覆盖,接着右下角的是前景图像,通过 android:foreground="@drawable/logo"设置前景图像的图片, android:foregroundGravity="right|bottom"设置前景图像的位置在右下角

2.随手指移动的小女孩

实现流程解析:

step 1:先将main.xml布局设置为空白的FrameLayout,为其设置一个图片背景
step 2:新建一个继承View类的MeziView自定义组件类,在构造方法中初始化view的初始坐标
step 3:重写onDraw()方法,实例化一个空的画笔类Paint
step 4:调用BitmapFactory.decodeResource()生成位图对象
step 5:调用canvas.drawBitmap()绘制小女孩的位图对象
step 6:判断图片上是否回收,否则强制回收图片
step 7:在主Java代码中获取帧布局对象,并且实例化一个MeziView类
step 8:会实例化的小女孩对象添加一个触摸事件的监听器,重写onTouch方法,改变小女孩的X,Y坐标,调用invalidate()重绘方法
step 9: 将小女孩对象添加到帧布局中

布局代码:main_activity.xml


自定义的xiaonvhaiView.java

package com.jay.example.framelayoutdemo2;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;

public class xiaonvhaiView extends View {
//定义相关变量,依次是小女孩显示位置的X,Y坐标
public float bitmapX;
public float bitmapY;
public xiaonvhaiView(Context context) {
super(context);
//设置小女孩的起始坐标
bitmapX = 0;
bitmapY = 200;
}

//重写View类的onDraw()方法  
@Override  
protected void onDraw(Canvas canvas) {  
    super.onDraw(canvas);  
    //创建,并且实例化Paint的对象  
    Paint paint = new Paint();  
    //根据图片生成位图对象  
    Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.s_jump);  
    //绘制小女孩  
    canvas.drawBitmap(bitmap, bitmapX, bitmapY,paint);  
    //判断图片是否回收,木有回收的话强制收回图片  
    if(bitmap.isRecycled())  
    {  
        bitmap.recycle();  
    }  
} 

}

MainActivity.java:

package com.jay.example.framelayoutdemo2;

import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.FrameLayout;
import android.app.Activity;

public class MainActivity extends Activity {

@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main);  
    FrameLayout frame = (FrameLayout) findViewById(R.id.mylayout);  
    final xiaonvhaiView xiaonvhai = new XiaonvhaiView(MainActivity.this);  
    //为我们的小女孩添加触摸事件监听器  
    xiaonvhai.setOnTouchListener(new OnTouchListener() {  
        @Override  
        public boolean onTouch(View view, MotionEvent event) {  
            //设置小女孩显示的位置  
            xiaonvhai.bitmapX = event.getX() - 150;  
            xiaonvhai.bitmapY = event.getY() - 150;  
            //调用重绘方法  
            xiaonvhai.invalidate();  
            return true;  
        }  
    });  
    frame.addView(xiaonvhai);  
}  

}

3.跑动的小女孩

step 1:定义一个空的FrameLayout布局,将前景图像的位置设置为中央位置
step 2:在Activity中获取到该FrameLayout布局,新建一个Handler对象,重写handlerMessage()方法,调用图像- 更新的方法
step 3:自定义一个move()方法,通过switch动态设置前景图片显示的位图
step 4:在onCreate()方法中新建一个计时器对象Timer,重写run方法,每隔170毫秒向handler发送空信息

布局文件:main_activity.xml:


MainActivity.java:

package com.jay.example.framelayoutdemo3;

import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.FrameLayout;
import android.app.Activity;
import android.graphics.drawable.Drawable;

public class MainActivity extends Activity {
//初始化变量,帧布局
FrameLayout frame = null;
//自定义一个用于定时更新UI界面的handler类对象
Handler handler = new Handler()
{
int i = 0;
@Override
public void handleMessage(Message msg) {
//判断信息是否为本应用发出的
if(msg.what == 0x123)
{
i++;
move(i % 8 );
}
super.handleMessage(msg);
}
};

//定义走路时切换图片的方法    
void move(int i)    
{    
    Drawable a = getResources().getDrawable(R.drawable.s_1);    
    Drawable b = getResources().getDrawable(R.drawable.s_2);    
    Drawable c = getResources().getDrawable(R.drawable.s_3);    
    Drawable d = getResources().getDrawable(R.drawable.s_4);    
    Drawable e = getResources().getDrawable(R.drawable.s_5);    
    Drawable f = getResources().getDrawable(R.drawable.s_6);    
    Drawable g = getResources().getDrawable(R.drawable.s_7);    
    Drawable h = getResources().getDrawable(R.drawable.s_8);    
    //通过setForeground来设置前景图像    
    switch(i)    
    {    
        case 0:    
            frame.setForeground(a);    
            break;    
        case 1:    
            frame.setForeground(b);    
            break;    
        case 2:    
            frame.setForeground(c);    
            break;    
        case 3:    
            frame.setForeground(d);    
            break;    
        case 4:    
            frame.setForeground(e);    
            break;    
        case 5:    
            frame.setForeground(f);    
            break;    
        case 6:    
            frame.setForeground(g);    
            break;    
        case 7:    
            frame.setForeground(h);    
            break;    
    }    
}    
    
@Override    
protected void onCreate(Bundle savedInstanceState) {    
    super.onCreate(savedInstanceState);    
    setContentView(R.layout.activity_main);    
        
    frame = (FrameLayout) findViewById(R.id.myframe);    
    //定义一个定时器对象,定时发送信息给handler    
    new Timer().schedule(new TimerTask() {    
            
        @Override    
        public void run() {    
            //发送一条空信息来通知系统改变前景图片    
            handler.sendEmptyMessage(0x123);    
        }    
    }, 0,170);     
}    

}

android-ui入门之FrameLayout 文档:​​​​​​https://developer.android.com/reference/android/widget/FrameLayout?hl=en 1.简介 FrameLayout 旨在在屏幕上遮挡一个区域以显示单个项目。 通常,FrameLayout 应该用于保存单个子视图,因为很难以可缩放到不同屏幕尺寸的方式组织子视图而不会使子视图相互重叠。 但是,您可以将多个子项添加到 FrameLayout 并通过使用android:layout_gravity属性为每个子项分配重力 阅读详情

相关推荐

(八)Android布局类型(帧布局FrameLayout)

Android布局类型(帧布局FrameLayout)

以秘 1061

Android 的 FrameLayout (帧布局)

FrameLayout(帧布局)可以说是六大布局中最为简单的一个布局,这个布局直接在屏幕上开辟出一块空白的区域,当我们往里面添加控件的时候,会默认把他们放到这块区域的左上角,而这种布局方式却没有任何的定位方式,所以它应用的场景并不多;见步骤,很简单,就是自定义一个View类,重写重绘方法,接着在Activity中为他添加一个触摸时间在触摸时间中重写onTouch方法获取点击焦点,另外还需要-150,不然那个坐标是自定义View的左上角,接着调用invalidate( )重绘方法,最后添加到帧布局中而已!

leyang0910的博客 4764

Android 基础入门教程之FrameLayout(帧布局)

本文介绍了Android开发中的FrameLayout(帧布局)特点及使用方法。帧布局是最简单的布局,控件默认堆叠在左上角,后添加的会覆盖前面的。文章重点讲解了帧布局的两个关键属性:foreground设置前景图像,foregroundGravity控制其位置。通过三个实例演示:基本使用、手指拖动图片和动画效果,展示了帧布局的实际应用。其中拖动图片通过自定义View和重绘实现,动画效果则利用Handler定时切换前景图片。帧布局适合需要叠加显示控件的场景,掌握前景图像相关属性即可灵活运用。

xiaoaque的博客 1160

Android常用布局总结之(FrameLayout、ConstraintLayout)

一、FrameLayout 帧布局: 这种布局类似叠加的图片,没有任何的定位方式,当我们往里面添加组件的时候,会默认把他们放到容器的左上角。 上面的组件显示在底层,下面的组件显示在上层 二、ConstraintLayout 约束布局: 从 Android Studio 2.3 起,官方的模板默认使用 ConstraintLayout,它的出现主要是为了解决布局嵌套过多的问题,以灵活的方式定位和调整小部件,能够更好地适配屏幕大小不同的机型。

不积跬步无以至千里,不积小流无以成江海。一个喜欢学习分享的程序员 5679

Surface Pro 4/5/6/7保姆级黑苹果安装:从Windows分区到OC引导配置全流程(含EFI文件替换避坑)

本文详细介绍了在Surface Pro 4/5/6/7上安装黑苹果的全流程,包括Windows分区、OC引导配置和EFI文件替换等关键步骤。通过实战经验分享,帮助用户避开常见陷阱,实现Windows与macOS双系统完美共存,特别适合对黑苹果安装感兴趣的Surface Pro用户。

weixin_30300225的博客 1373

从UC3842的FB脚到COMP脚:一次讲透反激电源两种光耦反馈接法的选择与实战

本文深入探讨了UC3842 PWM控制器在反激式开关电源设计中的两种光耦反馈接法:FB脚与COMP脚方案。通过分析信号极性差异、稳定性特点及动态响应性能,提供场景化选型指南和可靠性设计要点,帮助工程师优化反馈环路设计,提升系统稳定性与效率。特别针对TL431和PC817等关键元件在温度漂移、老化衰减等实际问题给出解决方案。

weixin_28717683的博客 709

安卓java帧布局_Android布局(四)--- FrameLayout(帧布局)

1.常用属性前景图像:永远处于帧布局最上面,直接面对用户的图像,就是不会被覆盖的图片。两个属性:android:foreground:*设置改帧布局容器的前景图像android:foregroundGravity:设置前景图像显示的位置2.实例演示1)最简单的例子运行效果图:实现代码如下:xmlns:tools="http://schemas.android.com/tools"android:i...

weixin_35554771的博客 522

YOLOv5实战:无人机巡检图片差异对比与违建标记(附完整代码)

本文详细介绍了如何利用YOLOv5目标检测技术实现无人机巡检图片差异对比与违建标记。通过图像对齐、目标检测、差异分析和可视化标记四个步骤,构建高效的违建识别系统,显著提升城市管理效率。文章包含完整代码实现和性能优化技巧,为计算机视觉在无人机巡检中的应用提供实用指南。

weixin_42535720的博客 282

android开发帧布局,Visual Studio 开发安卓之布局-帧布局(FrameLayout)

帧布局(FrameLayout)的标签名称是 FrameLayout,FrameLayout下面的控件全部是从 FrameLayout的左上角开始排列,就好比里面的控件都用了 CSS属性:position:absolute; top:0px; left:0px;一样。先写的控件呈现在下层。示例:android:layout_width="match_parent"android:layou...

weixin_32620249的博客 357

Python逆向实战:突破PDD长连接抓包的技术解析

本文详细解析了如何通过Python逆向技术突破PDD长连接抓包的难点,包括分析PDD的网络机制、绕过SSL证书验证以及完整抓包实战流程。文章重点介绍了使用Frida和VAXposed工具解决长连接和SSL Pinning问题,并提供了Python代码示例和数据分析方案,帮助开发者高效抓取PDD数据。

weixin_28678151的博客 1224

保姆级图解:FD-SOI工艺流程中的关键三步(外延生长、应变硅、HKMG)

本文详细解析了FD-SOI工艺流程中的三大关键技术:外延生长、应变硅工程和HKMG集成。通过选择性外延生长技术优化接触电阻,利用应变硅提升载流子迁移率,并结合先栅高k金属栅工艺实现精准栅极控制,FD-SOI技术在智能手机处理器和自动驾驶芯片制造中展现出卓越的低功耗与高性能平衡。

weixin_29267307的博客 491

android中帧布局效果,布局之FrameLayout(帧布局)详解

New UI-布局之FrameLayout(帧布局)详解 ——转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途!本节引言:FrameLayout(帧布局)可以说是六大布局中最为简单的一New UI-布局之FrameLayout(帧布局)详解——转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途!小猪Android开发交流群已建立,欢迎大家加入,无论是新手,菜鸟,大神都可以...

weixin_36163672的博客 2150

【2DWT:2维离散小波变换(附Pytorch代码)】

图像信号具有非平稳特性,无法使用一种确定的数学模型来描述,而小波变换的多分辨率分析特性很好地解决了这个问题。小波变化的多分辨率特性使其既可以高效描述图像的平坦区域(低频信息、全局信息),也可以有效处理图像信号的局部突变(高频信息,即图像的边缘轮廓等部分)。小波变换在空域和频域同时具有良好的局部性,使其可以很好地聚焦到图像的任意细节。

NorthSmile的博客 1万+

android framelayout让布局在最上层_安卓界面布局之表格布局与帧布局

TableLayout(表格布局)Android中的表格布局与HTML中的表格标签< table >< tr >< td >相似,通过使用表格的行与列来排列组件。如果一行上有多个组件的话,就要在TableLayout中添加一个TableRow的容器,把组件都丢到里面!一个Tablerow一行,有多少列则是看TableRow中的组件个数。常用属性android:c...

weixin_29300805的博客 2299

23、关联挖掘到相关性分析及约束关联挖掘详解

本文详细解析了从关联挖掘到相关性分析的发展过程,以及基于约束的关联挖掘方法。文章介绍了传统支持-置信度框架的局限性,并引入Lift、χ2、All Confidence和Cosine等度量来评估规则的相关性。同时探讨了多种规则约束在数据挖掘中的应用机制及其优化效果,旨在提高挖掘效率和规则质量。最后结合实际案例说明如何综合运用相关性度量与规则约束以满足业务需求,并展望了数据挖掘技术的未来发展。

aa123的博客 103

Pyhon在振动信号处理中的高级应用(一):振动信号特征(时域、频域)提取

文章目录一、概述二、算法原理2.1 时域统计特征三、python代码实现 一、概述 二、算法原理   这里我们借鉴西安交通大学机械学院雷教授的论文《Fault diagnosis of rotating machinery based on multiple ANFIS combination with GAs》相关研究成果。雷教授在论文中共列举了4类共24种振动信号的时域和频域特征。 2.1 时域统计特征 p1=∑n=1Nx(n)NP2=∑n=1N(x(n)−p1)2N−1p3=(∑n=1N∣x(n)∣N

白银时代的博客 1万+

android项目中帧布局,Android中的FrameLayout帧布局

帧布局由FrameLayout所代表,FrameLayout直接继承了ViewGoup组件。帧布局容器为每一个增加当中的组件创建一个空白的区域(称为一个帧),每一个子组件占领一帧,这些帧都会依据gravity属性运行自己主动对齐。代码:android:layout_width="match_parent"android:layout_height="match_parent"android:ori...

weixin_39721953的博客 186

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android framelayout 白色条,Android中的FrameLayout帧布局

帧布局由FrameLayout所代表,FrameLayout直接继承了ViewGoup组件。帧布局容器为每一个增加当中的组件创建一个空白的区域(称为一个帧),每一个子组件占领一帧,这些帧都会依据gravity属性运行自己主动对齐。代码:android:layout_width="match_parent"android:layout_height="match_parent"android:ori...

weixin_30350163的博客 185

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android开发帧布局,Android FrameLayout ( 帧布局 )

Android FrameLayout (帧布局) 直接在屏幕上开辟出一块空白的区域,当我们往里面添加控件的时候,会默认把它们放到这块区域的左上角FrameLayoutFrameLayout (帧布局) 有点类似于把零散的大小不一的纸按左上角对齐的方式定成一本书一样FrameLayout (帧布局) 有一个缺点就是没有任何的定位方式,所以应用的场景并不多FrameLayout size 大小帧布局...

weixin_35682992的博客 3093

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android应用开发之FrameLayout(帧布局)

帧布局介绍

u012739527的博客 4539

Android FrameLayout 帧布局

参考链接: https://blog.youkuaiyun.com/qq_36772866/article/details/89010678

qq_27494201的博客 1889

安卓java帧布局_Android布局之帧布局FrameLayout详解

FrameLayout在这个布局中,所有的子元素都不能被指定放置的位置,他们统统防御这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡。用途常用于进度条的表示android:layout_width="match_parent" android:layout_height="match_parent">android:layout_gravity="c...

weixin_29206669的博客 211

android的帧布局,七、Android帧布局FrameLayout和霓虹灯效果

帧布局容器为每个加入其中的组件创建一个空白的区域(称为一帧),所有每个子组件占据一帧,这些帧都会根据gravity属性执行自动对齐。FrameLayout的常用XML属性和相关方法XML属性相关方法说  明android:foregroundsetForeground(Drawable)设置该帧布局容器的前景图像android:foregroundGravitysetForegroundGravi...

weixin_42527589的博客 347

android的帧布局管理(FrameLayout)的案例

案例运行效果如下 在xml添加如下代码 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_h

qq_44716544的博客 564

Android: FrameLayout帧布局

两分钟掌握FrameLayout帧布局 https://baijiahao.baidu.com/s?id=1575325525978446&amp;wfr=spider&amp;for=pc 一、认识FrameLayout 帧布局是Android布局中最简单的一种,使用FrameLayout标签。 帧布局为每个加入其中的控件创建一个空白区域(称为一帧,每个控件占据一 帧)。釆用帧布局...

dc3120的专栏 580
上一篇: Android-RelativeLayout(相对布局)
下一篇: Android-AbsoluteLayout(绝对布局)
Android_xi
博客等级 码龄8年 4粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值