FrameLayout(帧布局)
前言
作为android六大布局中最为简单的布局之一,该布局直接在屏幕上开辟出了一块空白区域,
当我们往里面添加组件的时候,所有的组件都会放置于这块区域的左上角;
帧布局的大小由子控件中最大的子控件决定,
如果都组件都一样大的话,同一时刻就只能能看到最上面的那个组件了!
当然我们也可以为组件添加layout_gravity属性,从而制定组件的对其方式
帧布局在游戏开发方面用的比较多,等下后面会给大家演示一下比较有意思的两个实例
前景图像:
永远处于帧布局最顶的,直接面对用户的图像,,就是不会被覆盖的图片
常用属性:
android:foreground:设置该帧布局容器的前景图像
android:foregroundGravity:设置前景图像显示的位置
应用实例:
①最简单的实例:
属性很简单,接着演示下FrameLayout的基本用法
真的很简单,网上大部分的例子都是这个= =,
效果图:
代码如下:
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/FrameLayout1"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context=".MainActivity"
- android:foreground="@drawable/logo"
- android:foregroundGravity="right|bottom">
- <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" />
- </FrameLayout>
代码解释:
如图,我们设置了三个图片块,而这些图片块仅仅是三个设置了不同背景颜色的TextView
TextView都出现在了左上角,为了避免覆盖,大小是依次递减的
在外层FrameLayout中设置了前景图像显示的图片,以及把它设置到了右下角
②跟随手指移动的萌妹子
效果图:
实现流程:
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:会实例化的mezi对象添加一个触摸事件的监听器,重写onTouch方法,改变mezi的X,Y坐标,调用invalidate()重绘方法
step 9: 将mezi对象添加到帧布局中
详细代码:
布局代码:
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"