FrameLayout(帧布局)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FrameLayout(帧布局)相关的知识,希望对你有一定的参考价值。

分类:C#、android、VS2015;

创建日期:2016-02-11

一、简介

帧布局是显示多个层次图的有效手段。比如第3章介绍的百度地图就是利用帧布局来实现的,它将图层分为22级分别缓存到指定的文件夹下,程序根据用户对地图的放大程度,自动判断应该将哪一级作为最顶层的图层。另外,地图覆盖物功能也是利用它来实现的。

帧布局的特点是:所有元素都会从容器的左上角开始放置,第一个添加的元素被放在最底层,最后一个添加的元素放在在最顶层。默认情况下,上一层的元素会覆盖下一层的元素,除非不同层元素的大小不一样(其效果是部分覆盖),或者顶层的元素是透明的。

具体来说,对于不透明度为1(范围0.0~1.0,1为完全完全不透明)的元素,可进一步细分为:

(1)如果下层元素和上层元素的宽高都相同,则上层元素将完全覆盖下层元素。

(2)如果下层元素大,上层元素小,则上层元素仅部分覆盖下层元素。

二、示例—Demo05FrameLayout

本示例简单演示3个图层的情况:

第0层:img1.jpg

第1层:img2.jpg

第2层:img3.jpg

每单击一次【下一层】按钮,都会将图层减1,然后显示对应层的图。当减到第0层时,变为第2层,依次循环。

注意:该示例仅为了演示图层覆盖的情况(默认都可见,但仅顶层可看到),例子并没有处理如何缓存图片的问题。

1、运行截图

技术分享

2、添加Demo05FrameLayout.axml文件

在Resources/layout文件夹下添加该文件。

<?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/image1"
        android:src="@drawable/sample_2"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    <ImageView
        android:id="@+id/image2"
        android:src="@drawable/sample_4"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    <ImageView
        android:id="@+id/image3"
        android:src="@drawable/sample_6"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    <Button
        android:id="@+id/btnNext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="下一层"
        android:layout_gravity="center_horizontal" />
</FrameLayout>

3、添加Demo05FrameLayout.cs文件

在SrcDemos文件夹下添加该文件。

using System.Collections.Generic;
using Android.App;
using Android.OS;
using Android.Views;
using Android.Widget;
namespace ch07demos.SrcDemos
{
    [Activity(Label = "Demo05FrameLayout")]
    public class Demo05FrameLayout : Activity
    {
        List<ImageView> images = new List<ImageView>();
        int current;
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.Demo05FrameLayout);

            images.Add(FindViewById<ImageView>(Resource.Id.image1));
            images.Add(FindViewById<ImageView>(Resource.Id.image2));
            images.Add(FindViewById<ImageView>(Resource.Id.image3));
            current = images.Count - 1;
            FindViewById<Button>(Resource.Id.btnNext).Click +=delegate
            {
                images[current].Visibility = ViewStates.Invisible;
                current--;
                if (current < 0) current = images.Count - 1;
                images[current].Visibility = ViewStates.Visible;
            };
        }
    }
}

以上是关于FrameLayout(帧布局)的主要内容,如果未能解决你的问题,请参考以下文章

Android零基础入门第30节:两分钟掌握FrameLayout帧布局

FrameLayout(帧布局)

FrameLayout(帧布局)

2.2.4 FrameLayout(帧布局)

Android 帧布局FrameLayout之霓虹灯效果

Android——布局(线性布局linearLayout,表格布局TableLayout,帧布局FrameLayout)