基于AnDroid FrameLayout的使用详解

今天在学习实现墨迹天气那样的拖动效果时,看到用的是重写FrameLayout。翻了翻书,突然想明白,为什么用FrameLayout.
在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"
    android:background="#897753"
    >
    <ImageView
        android:id="@+id/image1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:visibility="invisible"
        android:src="@drawable/sky"/>
    <ImageView
        android:id="@+id/image2"
        android:visibility="invisible"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/cloud"/>
    <ImageView
        android:id="@+id/image3"
        android:visibility="invisible"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/sun"/>
</FrameLayout>

其中,image1、image2、image3都是在同一块空间的。可以说它们是重叠着的,界面显示的是最近用的那一个。
在我的代码中把它们都先不可见。
在整体代码中实现的是点一下屏幕就换一张图片。
另外,我个人感觉,实现拖动效果的关键原理就是framelayout使得几部分空间的重叠。设置只有一部分可见。当拖动时,设置其他部分移动。
发现下载附近要扣e币,我把代码也贴上,图片可以换成自己喜欢的~
FramLayoutTestActivity.java


代码如下:

import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.widget.ImageView;
public class FramLayoutTestActivity extends Activity {
    private   String TAG = "FramLayoutTestActivity";
    private ImageView image1;
    private ImageView image2;
    private ImageView image3;
    private List<ImageView> list;
    private int count=0;
        /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        image1=(ImageView)findViewById(R.id.image1);
        image2=(ImageView)findViewById(R.id.image2);
        image3=(ImageView)findViewById(R.id.image3);
        list=new ArrayList<ImageView>();
        list.add(image1);
        list.add(image2);
        list.add(image3);
    }
        @Override
        public boolean onTouchEvent(MotionEvent event) {
                // TODO Auto-generated method stub
                if(event.getAction()==MotionEvent.ACTION_DOWN)
                {
                        Log.i(TAG,"move---");
                        showImage();
                }

return super.onTouchEvent(event);
        }
        private void showImage()
        {
                image1.setVisibility(View.VISIBLE);
                count=count%3;
                for(ImageView i:list)
                {
                        i.setVisibility(View.INVISIBLE);
                }
                list.get(count).setVisibility(View.VISIBLE);
                count++;
        }
}

main.xml


代码如下:

<?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"
    android:background="#897753"
    >
    <ImageView
        android:id="@+id/image1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:visibility="invisible"
        android:src="@drawable/sky"/>
    <ImageView
        android:id="@+id/image2"
        android:visibility="invisible"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/cloud"/>
    <ImageView
        android:id="@+id/image3"
        android:visibility="invisible"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/sun"/>
</FrameLayout>

(0)

相关推荐

  • Android常用布局(FrameLayout、LinearLayout、RelativeLayout)详解

    很多开发者一听说Android终端的屏幕尺寸五花八门,屏幕分辨率千奇百怪,就觉得Android开发在屏幕适配方面是必定是一件头疼的事情.因为在Android问世之前,广大开发者知道的UI解决方案大致分为两类: 1.在Web开发中的CSS,一层一层的去层叠样式. 2.在iOS开发中去计算每一个UIView的尺寸. 上面两种方案,无论哪种方案面对碎片化严重的Android终端,那都是一场噩梦.好在Android提供了另一套解决方案来应对严重的终端碎片化,这就是布局和9-patch. 这里想来说说布局

  • Android入门之RelativeLayout、FrameLayout用法分析

    本文讲述的是Android中RelativeLayout.FrameLayout的用法.具体如下: RelativeLayout是一个按照相对位置排列的布局,跟AbsoluteLayout这个绝对坐标布局是个相反的理解. 在RelativeLayout布局里的控件包含丰富的排列属性: Layout above:选择ID A,则该控件在A控件的上方, Layout below.Layout to left of.等同样用法.使用 RelativeLayout布局的时候,最好在界面设计时 做好布局,

  • FrameLayout和Fragment处理Android应用UI布局实例

    将Fragment与Layout结合使用,一般都是主Activity以frame填充Activity的方式交互管理Fragment : 1.由于用到getSupportFragmentManager()之类,所以主Activity的extends需为FragmentActivity: public class MainActivity extends FragmentActivity{ .......... } 2.主Activity的layout(xml文件)中建立多个Frame并定义其And

  • 简析Android五大布局(LinearLayout、FrameLayout、RelativeLayout等)

    Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLayout(线性布局).FrameLayout(单帧布局).RelativeLayout(相对布局).AbsoluteLayout(绝对布局)和TableLayout(表格布局). 布局一:LinearLayout LinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元

  • Android布局之FrameLayout帧布局

    前言 作为android六大布局中最为简单的布局之一,该布局直接在屏幕上开辟出了一块空白区域, 当我们往里面添加组件的时候,所有的组件都会放置于这块区域的左上角; 帧布局的大小由子控件中最大的子控件决定,如果都组件都一样大的话,同一时刻就只能能看到最上面的那个组件了! 当然我们也可以为组件添加layout_gravity属性,从而制定组件的对其方式 帧布局在游戏开发方面用的比较多,等下后面会给大家演示一下比较有意思的两个实例 (-)帧布局简介 帧布局容器为每个加入的其中的组件创建一个空白的区域称

  • Android布局之帧布局FrameLayout详解

    FrameLayout 在这个布局中,所有的子元素都不能被指定放置的位置,他们统统防御这块区域的左上角, 并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡. 用途 常用于进度条的表示 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" a

  • Android自定义View设定到FrameLayout布局中实现多组件显示的方法 分享

    如果想在自定义的View上面显示Button 等View组件需要完成如下任务 1.在自定义View的类中覆盖父类的构造(注意是2个参数的) 复制代码 代码如下: public class MyView2 extends View{ public MyView2(Context context,AttributeSet att) {super(context,att); } public void onDraw(Canvas c) { // 这里绘制你要的内容 } } 2.定义布局文件 复制代码

  • Android下拉刷新PtrFrameLayout的使用实例代码

    1.介绍: 可以包含所有的控件 :ListView, GridView, ScrollView, FrameLayout, 甚至 TextView. 可以自定义刷新头(这点非常实用) 使用简单方便 不足就是不支持上拉加载. 2.使用 首先添加依赖到项目 compile 'in.srain.cube:ultra-ptr:1.0.11' 在Xml中使用 <in.srain.cube.views.ptr.PtrFrameLayout xmlns:android="http://schemas.a

  • 基于AnDroid FrameLayout的使用详解

    今天在学习实现墨迹天气那样的拖动效果时,看到用的是重写FrameLayout.翻了翻书,突然想明白,为什么用FrameLayout.在FrameLayout中,用我看的书中的话说是,空间永远用不完. 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?><FrameLayout    xmlns:android="http://schemas.android.com/apk/res/androi

  • 基于Android RxCache使用方法详解

    前言 我为什么使用这个库? 事实上Android开发中缓存功能的实现选择有很多种,File缓存,SP缓存,或者数据库缓存,当然还有一些简单的库/工具类,比如github上的这个: [ASimpleCache]:a simple cache for android and java 但是都不是很好用(虽然可能学习成本比较低,因为它使用起来相对简单),我可能需要很多的静态常量来作为key存储缓存数据value,并设置缓存的有效期,这可能需要很多Java代码去实现,并且过程繁琐. 如果您使用的网络请求

  • 基于Android FileProvider 属性配置详解及FileProvider多节点问题

    众所周知在android7.0,修改了对私有存储的限制,导致在获取资源的时候,不能通过Uri.fromFile来获取uri了我们需要适配7.0+的机型需要这样写: 1:代码适配 if (Build.VERSION.SDK_INT > 23) {// intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); Uri contentUri = FileProvider.getUriForFile(context, SysInfo.packageN

  • 基于Android ContentProvider的总结详解

    1.适用场景1) ContentProvider为存储和读取数据提供了统一的接口2) 使用ContentProvider,应用程序可以实现数据共享3) android内置的许多数据都是使用ContentProvider形式,供开发者调用的(如视频,音频,图片,通讯录等)2.相关概念介绍1)ContentProvider简介当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的

  • 基于Android SQLite的升级详解

    做Android应用,不可避免的会与SQLite打交道.随着应用的不断升级,原有的数据库结构可能已经不再适应新的功能,这时候,就需要对SQLite数据库的结构进行升级了. SQLite提供了ALTER TABLE命令,允许用户重命名或添加新的字段到已有表中,但是不能从表中删除字段. 并且只能在表的末尾添加字段,比如,为 Subscription添加两个字段: 复制代码 代码如下: ALTER TABLE Subscription ADD COLUMN Activation BLOB;ALTER

  • 基于Python的Android图形解锁程序详解

    安卓手机的图形锁是3x3的点阵,按次序连接数个点从而达到锁定/解锁的功能.最少需要连接4个点,最多能连接9个点.网上也有暴力删除手机图形锁的方法,即直接干掉图形锁功能.但假如你想进入别人的手机,但又不想引起其警觉的话--你可以参考一下本文(前提条件:手机需要root,而且打开调试模式.一般来讲,如果用过诸如"豌豆荚手机助手"."360手机助手"一类的软件,都会被要求打开调试模式的.如果要删除手机内置软件,则需要将手机root). 首先科普一下,安卓手机是如何标记这9

  • 基于VSTS的Xamarin.Android持续集成步骤详解

    目录 Build Agent 环境需求 Build的部分分为以下步骤 1. 还原NuGet包 2. 替换版本号 3. 编译Android程序 4. 获取编译Andorid的AndroidManifest数据 5. 对编译好的Android apk进行签名 6. 删除多余的文件 7. 生成 ReleaseNotes 8. 生成预发布脚本 这些天做了一个,这里分享下 Build Agent 环境需求 DotNetFramework msbuild visualstudio AndroidSDK JD

  • 基于AngularJS的简单使用详解

    Angular Js 的初步认识和使用 一: 1.模块化 定义模块和控制器 ng-app="myapp" controller="myctrl" 指定模型 ng-model="" 获取的属性值: ng-bind="属性名"或者{{属性名}} 2.初始化模块(在Script中进行) var myapp1 =angular.module("myapp",[]); 3.定义模块的控制器,并依赖注入, $scope

  • Android Tab 控件详解及实例

    Android Tab 控件详解及实例 在桌面应用中Tab控件使用得非常普遍,那么我们经常在Android中也见到以Tab进行布局的客户端.那么Android中的Tab是如何使用的呢? 1.Activity package com.wicresoft.activity; import com.wicresoft.myandroid.R; import android.app.TabActivity; import android.os.Bundle; import android.util.Lo

  • 史上最全Android build.gradle配置详解(小结)

    Android Studio是采用gradle来构建项目的,gradle是基于groovy语言的,如果只是用它构建普通Android项目的话,是可以不去学groovy的.当我们创建一个Android项目时会包含两个Android build.gradle配置详解文件,如下图: 一.Project的build.gradle文件: 对应的build.gradle代码如下: // Top-level build file where you can add configuration options

随机推荐