【Android】7.6 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、运行截图

image

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;
            };
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值