当前位置: 首页 > news >正文

FrameLayout的作用

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

今天在学习实现墨迹天气那样的拖动效果时,看到用的是重写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使得几部分空间的重叠。设置只有一部分可见。当拖动时,设置其他部分移动。

我把代码也贴上,图片可以换成自己喜欢的~

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);
      image1.setVisibility(View.VISIBLE); // 初始状态
     }
     @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() {
      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>

转载于:https://my.oschina.net/u/660536/blog/369398

相关文章:

  • 解决git push远程分支错误
  • Ubuntu 终端命令整理
  • 算法模板——线段树5(区间开根+区间求和)
  • 在Apache下开启SSI配置
  • PHP 文件上传功能
  • Ngnice-国内ng学习网站
  • 【Java】使用动态代理与包装模式实现连接池
  • 关于exp/imp的总结学习
  • Flash中动态生成Js方法,实现页面刷新等功能
  • UITextView的使用详解
  • C#操作Xml:XSLT语法 在.net中使用XSLT转换xml文档示例
  • [SAP ABAP开发技术总结]面向对象OO
  • Java内存模型(二)
  • String 转换成 Double
  • 图像检索:一维直方图+EMD距离
  • 【技术性】Search知识
  • canvas 绘制双线技巧
  • CSS盒模型深入
  • Docker下部署自己的LNMP工作环境
  • in typeof instanceof ===这些运算符有什么作用
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JAVA 学习IO流
  • MySQL QA
  • python_bomb----数据类型总结
  • Sequelize 中文文档 v4 - Getting started - 入门
  • webgl (原生)基础入门指南【一】
  • 精彩代码 vue.js
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端面试题总结
  • 小程序 setData 学问多
  • FaaS 的简单实践
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​插件化DPI在商用WIFI中的价值
  • ​什么是bug?bug的源头在哪里?
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (力扣)循环队列的实现与详解(C语言)
  • (一)Neo4j下载安装以及初次使用
  • (转)负载均衡,回话保持,cookie
  • (转)甲方乙方——赵民谈找工作
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET单元测试
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [Angular] 笔记 20:NgContent
  • [BZOJ3223]文艺平衡树
  • [ESP32] 编码旋钮驱动
  • [hive] sql中distinct的用法和注意事项
  • [HOW TO]如何在iPhone应用程序中发送邮件