精华内容
下载资源
问答
  • 常见界面布局之FrameLayout(帧布局
    千次阅读
    2020-07-04 10:05:22

    1.什么是FrameLayout(帧布局)

    FrameLayout (帧布局)用于在屏幕上创建一块空白区域,添加到该区域中的每个子控件占一帧,这些帧会一个一个叠加在一起,后加入的控件会叠加在上一个控件上层。默认情况下,帧布局中的所有控件会与左上角对齐。在XML布局文件中定义FrameLayout的基本语法格式如下:

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    	属性一”属性值“》
    </FrameLayout>
    

    2.FrameLayout(帧布局)的属性

    帧布局除了前面的RelatitveLayout(相对布局)介绍的通用属性外,还有两个特殊属性,具体如表2-1所示。
    表2-6 FrameLayout 属性

    属性名称功能描述
    android:foreground设置帧布局容器的前景图像(始终在所有子控件之上)
    android:foregroundGravity设置前景图像显示的位置

    3.如何在布局中使用android:foreground 和landroid:foregroundGravity属性指定控件位置,具体步骤如下:

    1. 创建程序

    创建一个名为FrameLayout的应用程序,指定包名为cn.itcast.framelayout。

    1. 放置界面控件

    在activity_main.xml文件的FrameLayout布局中放置2个Button控件,分别用于显示按钮1和按钮2。
    在这里插入图片描述

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    
      //设置FrameLayout帧布局容器的前景图像(始终在所有子控件之上)
    
        android:foreground="@mipmap/ic_launcher"
    
      //设置前景图像显示的位置
    
        android:foregroundGravity="left"
        >
        <Button
            android:layout_width="300dp"
            android:layout_height="400dp"
            android:text="按钮1"
            />
        <Button
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:text="按钮2"
            />
    </FrameLayout>
    

    在这里插入图片描述

    更多相关内容
  • Android FrameLayout (帧布局) 直接在屏幕上开辟出一块空白的区域,当我们往里面添加控件的时候,会默认把它们放到这块区域的左上角FrameLayoutFrameLayout (帧布局) 有点类似于把零散的大小不一的纸按左上角对齐的...

    Android FrameLayout (帧布局) 直接在屏幕上开辟出一块空白的区域,当我们往里面添加控件的时候,会默认把它们放到这块区域的左上角

    FrameLayout

    FrameLayout (帧布局) 有点类似于把零散的大小不一的纸按左上角对齐的方式定成一本书一样

    0d75a986f73fe30df38708150c7b917b.png

    FrameLayout (帧布局) 有一个缺点就是没有任何的定位方式,所以应用的场景并不多

    FrameLayout size 大小

    帧布局的大小由控件中最大的子控件决定

    如果控件的大小一样大的话,那么同一时刻就只能看到最上面的那个组件,后续添加的控件会覆盖前一个

    帧布局默认会将控件放置在左上角,但是可以通过 android:layout_gravity 属性指定到其它

    FrameLayout 属性

    FrameLayout 自己的属性只有就两个

    属性

    说明

    android:foreground

    设置改帧布局容器的前景图像

    android:foregroundGravity

    设置前景图像显示的位置

    前景图像:永远处于帧布局最上面,直接面对用户的图像,就是不会被覆盖的图片

    范例

    首先创建一个 空的 Android 项目 cn.twle.android.FrameLayout

    最简单的帧布局

    6bbc18f3a9f0cc1165181175510ff64f.png

    首先下载 /static/i/meimei_160x360.jpg 放到 res/drawable 目录下并重命名为 meimei.jpg 作为前景图片

    然后修改 activity_main.xml 修改为 FrameLayout 布局并添加三个

    activity_main.xml

    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/meimei"

    android:foregroundGravity="right|bottom">

    android:layout_width="500dp"

    android:layout_height="300dp"

    android:background="#00ff00" />

    android:layout_width="150dp"

    android:layout_height="150dp"

    android:background="#ff0000" />

    android:layout_width="100dp"

    android:layout_height="100dp"

    android:background="#00ffff" />

    很简单,三个 设置不同大小与背景色,依次覆盖,接着右下角的是前景图像

    通过 android:foreground="@drawable/meimei" 设置前景图像的图片,

    通过 android:foregroundGravity="right|bottom" 设置前景图像的位置在右下角

    随手指点击移动的妹子

    0b55e6f69e5ec220d9c8affb8f14a5e2.gif

    创建一个 空的 Android 项目 cn.twle.android.FrameLayout

    下载 /static/i/android/meimei.zip,并将所有的图片拖动到 res/drawable 目录下

    如果你复用上面创建的项目,则需要将 meimei.jpg 删掉

    修改 activity_main.xml 为空白的 FrameLayout,为其设置一个图片背景 meimei.gif

    activity_main.xml

    android:id="@+id/mylayout"

    android:layout_width="match_parent"

    android:layout_height="match_parent">

    在 MainActivity.java 目录下新建一个继承 View 类的 MeiMeiView 自定义组件类

    在构造方法中初始化 view 的初始坐标

    重写 onDraw() 方法,实例化一个空的画笔类 Paint

    调用 BitmapFactory.decodeResource() 生成位图对象

    调用 canvas.drawBitmap() 绘制妹子的位图对象

    判断图片上是否回收,否则强制回收图片

    MeiMeiView.java

    package cn.twle.android.framelayout;

    import android.content.Context;

    import android.graphics.Bitmap;

    import android.graphics.BitmapFactory;

    import android.graphics.Canvas;

    import android.graphics.Paint;

    import android.view.View;

    public class MeiMeiView extends View {

    //定义相关变量,依次是妹子显示位置的X,Y坐标

    public float bitmapX;

    public float bitmapY;

    public MeiMeiView(Context context) {

    super(context);

    //设置妹子的起始坐标

    bitmapX = 0;

    bitmapY = 200;

    }

    //重写View类的onDraw()方法

    @Override

    protected void onDraw(Canvas canvas) {

    super.onDraw(canvas);

    //创建,并且实例化 Paint 的对象

    Paint paint = new Paint();

    //根据图片生成位图对象

    Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.meimei);

    //绘制妹子

    canvas.drawBitmap(bitmap, bitmapX, bitmapY,paint);

    //判断图片是否回收,木有回收的话强制收回图片

    if(bitmap.isRecycled())

    {

    bitmap.recycle();

    }

    }

    }

    修改 MainActivity

    获取帧布局对象,并且实例化一个 MeiMeiView 类

    实例化的 meimei 对象添加一个触摸事件的监听器,重写 onTouch() 方法,改变 meimei 的X,Y坐标,调用 invalidate() 重绘方法

    将 meimei 对象添加到帧布局中

    MainActivity.java

    package cn.twle.android.framelayout;

    import android.os.Bundle;

    import android.view.MotionEvent;

    import android.view.View;

    import android.view.View.OnTouchListener;

    import android.widget.FrameLayout;

    import android.app.Activity;

    public class MainActivity extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    FrameLayout frame = (FrameLayout) findViewById(R.id.mylayout);

    final MeiMeiView meimei = new MeiMeiView(MainActivity.this);

    //为我们的妹子添加触摸事件监听器

    meimei.setOnTouchListener(new OnTouchListener() {

    @Override

    public boolean onTouch(View view, MotionEvent event) {

    //设置妹子显示的位置

    meimei.bitmapX = event.getX() - 150;

    meimei.bitmapY = event.getY() - 150;

    //调用重绘方法

    meimei.invalidate();

    return true;

    }

    });

    frame.addView(meimei);

    }

    }

    跑动的妹子

    54499e206f00f6b921789516b96a3398.gif

    范例的要点在于使用定时器定时发送更新图片的消息

    创建一个 空的 Android 项目 cn.twle.android.FrameLayout

    修改 activity_main.xml 为空白的 FrameLayout , 将前景图像的位置设置为中央位置

    activity_main.xml

    android:id="@+id/myframe"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:foregroundGravity="center">

    修改 MainActivity

    获取 FrameLayout 布局

    自定义一个 move() 方法,通过 switch 动态设置前景图片显示的位图

    新建一个 Handler 对象,重写 handlerMessage() 方法,调用图像的更新的方法

    在 onCreate()方法中新建一个计时器对象 Timer,重写 run 方法,每隔 170 毫秒向 handler 发送空信息

    MainActivity.java

    package cn.twle.android.framelayout;

    import java.util.Timer;

    import java.util.TimerTask;

    import android.os.Bundle;

    import android.os.Handler;

    import android.os.Message;

    import android.view.View;

    import android.view.View.OnClickListener;

    import android.widget.FrameLayout;

    import android.app.Activity;

    import android.graphics.drawable.Drawable;

    public class MainActivity extends Activity {

    //初始化变量,帧布局

    FrameLayout frame = null;

    // 自定义一个用于定时更新 UI 界面的 handler类对象

    Handler handler = new Handler()

    {

    int i = 0;

    @Override

    public void handleMessage(Message msg) {

    //判断信息是否为本应用发出的

    if(msg.what == 0x123)

    {

    i++;

    move(i % 8 );

    }

    super.handleMessage(msg);

    }

    };

    //定义走路时切换图片的方法

    void move(int i)

    {

    Drawable a = getResources().getDrawable(R.drawable.m_1);

    Drawable b = getResources().getDrawable(R.drawable.m_2);

    Drawable c = getResources().getDrawable(R.drawable.m_3);

    Drawable d = getResources().getDrawable(R.drawable.m_4);

    Drawable e = getResources().getDrawable(R.drawable.m_5);

    Drawable f = getResources().getDrawable(R.drawable.m_6);

    Drawable g = getResources().getDrawable(R.drawable.m_7);

    Drawable h = getResources().getDrawable(R.drawable.m_8);

    //通过setForeground来设置前景图像

    switch(i)

    {

    case 0:

    frame.setForeground(a);

    break;

    case 1:

    frame.setForeground(b);

    break;

    case 2:

    frame.setForeground(c);

    break;

    case 3:

    frame.setForeground(d);

    break;

    case 4:

    frame.setForeground(e);

    break;

    case 5:

    frame.setForeground(f);

    break;

    case 6:

    frame.setForeground(g);

    break;

    case 7:

    frame.setForeground(h);

    break;

    }

    }

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    frame = (FrameLayout) findViewById(R.id.myframe);

    //定义一个定时器对象,定时发送信息给 handler

    new Timer().schedule(new TimerTask() {

    @Override

    public void run() {

    //发送一条空信息来通知系统改变前景图片

    handler.sendEmptyMessage(0x123);

    }

    }, 0,170);

    }

    }

    展开全文
  • 帧布局的大小由子控件中最大的子控件决定,如果都组件都一样大的话,同一时刻就只能能看到最上面的那个组件了! 当然我们也可以为组件添加layout_gravity属性,从而制定组件的对其方式 帧布局在游戏开发方面用的比较多,...
  • New UI-布局之FrameLayout(帧布局)详解 ——转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途!本节引言:FrameLayout(帧布局)可以说是六大布局中最为简单的一New UI-布局之FrameLayout(帧布局)详解——转载请注明...

    New UI-布局之FrameLayout(帧布局)详解 ——转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途!本节引言:FrameLayout(帧布局)可以说是六大布局中最为简单的一

    New UI-布局之FrameLayout(帧布局)详解

    ——转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途!

    小猪Android开发交流群已建立,欢迎大家加入,无论是新手,菜鸟,大神都可以,小猪一个人的

    力量毕竟是有限的,写出来的东西肯定会有很多纰漏不足,欢迎大家指出,集思广益,让小猪的博文

    更加的详尽,帮到更多的人,O(∩_∩)O谢谢!

    新Android UI实例大全目录:

    本节引言:

    FrameLayout(帧布局)可以说是六大布局中最为简单的一个布局,这个布局直接在屏幕上开辟出

    一块空白的区域,当我们往里面添加控件的时候,会默认把他们放到这块区域的左上角,而这种布局方式

    却没有任何的定位方式,所以它应用的场景并不多;帧布局的大小由控件中最大的子控件决定,如果控件

    的大小一样大的话,那么同一时刻就只能看到最上面的那个组件!后续添加的控件会覆盖前一个!

    虽然默认会将控件放置在左上角,但是我们也可以通过layout_gravity属性,指定到其他的位置!

    本节除了给大家演示一个最简单的例子外,还给大家带了两个好玩的例子,有兴趣的可以看看!

    正文:

    常用属性:

    FrameLayout的属性很少就两个,但是在说之前我们先介绍一个东西:

    前景图像:永远处于帧布局最上面,直接面对用户的图像,就是不会被覆盖的图片

    两个属性:

    android:foreground:设置改帧布局容器的前景图像

    android:foregroundGravity:设置前景图像显示的位置

    实例演示:

    1)最简单的demo:

    效果图:

    06174c4c2227cba05343fe128fc2ecfe.png

    代码如下:

    xmlns: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">

    android:layout_width="200dp"

    android:layout_height="200dp"

    android:background="#FF6143" />

    android:layout_width="150dp"

    android:layout_height="150dp"

    android:background="#7BFE00" />

    android:layout_width="100dp"

    android:layout_height="100dp"

    android:background="#FFFF00" />

    代码解释:

    很简单,三个TextView设置不同大小与背景色,依次覆盖,接着右下角的是前景图像,通过

    android:foreground="@drawable/logo"设置前景图像的图片

    android:foregroundGravity="right|bottom"设置前景图像的位置在右下角

    2)随手指移动的萌妹子:

    效果图:

    75d717ac0cc2baf623b5f2db61761e1a.gif

    实现流程:

    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对象添加到帧布局中

    实现代码如下:

    布局代码:main_activity.xml:

    xmlns:tools=""

    android:id="@+id/mylayout"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity"

    android:background="@drawable/back" >

    自定义的MeziView.java:

    package com.jay.example.framelayoutdemo2;

    import android.content.Context;

    import android.graphics.Bitmap;

    import android.graphics.BitmapFactory;

    import android.graphics.Canvas;

    import android.graphics.Paint;

    import android.view.View;

    public class MeziView extends View {

    //定义相关变量,依次是妹子显示位置的X,Y坐标

    public float bitmapX;

    public float bitmapY;

    public MeziView(Context context) {

    super(context);

    //设置妹子的起始坐标

    bitmapX = 0;

    bitmapY = 200;

    }

    //重写View类的onDraw()方法

    @Override

    protected void onDraw(Canvas canvas) {

    super.onDraw(canvas);

    //创建,并且实例化Paint的对象

    Paint paint = new Paint();

    //根据图片生成位图对象

    Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.s_jump);

    //绘制萌妹子

    canvas.drawBitmap(bitmap, bitmapX, bitmapY,paint);

    //判断图片是否回收,木有回收的话强制收回图片

    if(bitmap.isRecycled())

    {

    bitmap.recycle();

    }

    }

    }

    MainActivity.java:

    package com.jay.example.framelayoutdemo2;

    import android.os.Bundle;

    import android.view.MotionEvent;

    import android.view.View;

    import android.view.View.OnTouchListener;

    import android.widget.FrameLayout;

    import android.app.Activity;

    public class MainActivity extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    FrameLayout frame = (FrameLayout) findViewById(R.id.mylayout);

    final MeziView mezi = new MeziView(MainActivity.this);

    //为我们的萌妹子添加触摸事件监听器

    mezi.setOnTouchListener(new OnTouchListener() {

    @Override

    public boolean onTouch(View view, MotionEvent event) {

    //设置妹子显示的位置

    mezi.bitmapX = event.getX() - 150;

    mezi.bitmapY = event.getY() - 150;

    //调用重绘方法

    mezi.invalidate();

    return true;

    }

    });

    frame.addView(mezi);

    }

    }

    代码解释:

    见步骤,很简单,就是自定义一个View类,重写重绘方法,接着在Activity中为他添加一个触摸时间

    在触摸时间中重写onTouch方法获取点击焦点,另外还需要-150,不然那个坐标是自定义View的

    左上角,接着调用invalidate( )重绘方法,最后添加到真布局中而已!

    代码下载:

    3)跑动的萌妹子:

    效果图:

    bcb6be3327c708aac83ec71c7e3759e6.gif

    实现流程:

    step 1:定义一个空的FrameLayout布局,将前景图像的位置设置为中央位置

    step 2:在Activity中获取到该FrameLayout布局,新建一个Handler对象,重写handlerMessage()方法,调用图像更新的方法

    step 3:自定义一个move()方法,通过switch动态设置前景图片显示的位图

    step 4:在onCreate()方法中新建一个计时器对象Timer,重写run方法,每隔170毫秒向handler发送空信息

    实现代码如下:

    展开全文
  • 本文介绍 Android 界面开发... FrameLayout 帧布局,最简单的布局,所有控件放置左上角 TableLayout 表格布局,以行列方式控制控件位置 四种布局示例 1.LinearLayout <LinearLayout xmlns:android=http://sche
  • 2.2.4 FrameLayout(帧布局)

    2021-06-02 22:42:06
    本节引言FrameLayout(帧布局)可以说是六大布局...帧布局的大小由控件中最大的子控件决定,如果控件的大小一样大的话,那么同一时刻就只能看到最上面的那个组件!后续添加的控件会覆盖前一个!虽然默认会将控件放置在左上...

    本节引言

    FrameLayout(帧布局)可以说是六大布局中最为简单的一个布局,这个布局直接在屏幕上开辟出一块空白的区域,当我们往里面添加控件的时候,会默认把他们放到这块区域的左上角,而这种布局方式却没有任何的定位方式,所以它应用的场景并不多;帧布局的大小由控件中最大的子控件决定,如果控件的大小一样大的话,那么同一时刻就只能看到最上面的那个组件!后续添加的控件会覆盖前一个!虽然默认会将控件放置在左上角,但是我们也可以通过layout_gravity属性,指定到其他的位置!本节除了给大家演示一个最简单的例子外,还给大家带了两个好玩的例子,有兴趣的可以看看!

    1.常用属性

    FrameLayout的属性很少就两个,但是在说之前我们先介绍一个东西:

    前景图像:永远处于帧布局最上面,直接面对用户的图像,就是不会被覆盖的图片。

    两个属性:

    **android:foreground:***设置改帧布局容器的前景图像

    android:foregroundGravity:设置前景图像显示的位置

    2.实例演示

    1)最简单的例子

    运行效果图:

    9ee3c7741ef624f77b72488bf5feab83.png

    实现代码如下:

    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">

    android:layout_width="200dp"

    android:layout_height="200dp"

    android:background="#FF6143" />

    android:layout_width="150dp"

    android:layout_height="150dp"

    android:background="#7BFE00" />

    android:layout_width="100dp"

    android:layout_height="100dp"

    android:background="#FFFF00" />

    代码解析: 很简单,三个TextView设置不同大小与背景色,依次覆盖,接着右下角的是前景图像,通过 android:foreground="@drawable/logo"设置前景图像的图片, android:foregroundGravity="right|bottom"设置前景图像的位置在右下角

    2)随手指移动的萌妹子

    效果图如下:

    9f1cdeb657a0650e5e9d5fb151e62976.png

    实现流程解析:

    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对象添加到帧布局中

    布局代码:main_activity.xml

    xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/mylayout"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity"

    android:background="@drawable/back" >

    自定义的MeziView.java

    package com.jay.example.framelayoutdemo2;

    import android.content.Context;

    import android.graphics.Bitmap;

    import android.graphics.BitmapFactory;

    import android.graphics.Canvas;

    import android.graphics.Paint;

    import android.view.View;

    public class MeziView extends View {

    //定义相关变量,依次是妹子显示位置的X,Y坐标

    public float bitmapX;

    public float bitmapY;

    public MeziView(Context context) {

    super(context);

    //设置妹子的起始坐标

    bitmapX = 0;

    bitmapY = 200;

    }

    //重写View类的onDraw()方法

    @Override

    protected void onDraw(Canvas canvas) {

    super.onDraw(canvas);

    //创建,并且实例化Paint的对象

    Paint paint = new Paint();

    //根据图片生成位图对象

    Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.s_jump);

    //绘制萌妹子

    canvas.drawBitmap(bitmap, bitmapX, bitmapY,paint);

    //判断图片是否回收,木有回收的话强制收回图片

    if(bitmap.isRecycled())

    {

    bitmap.recycle();

    }

    }

    }

    MainActivity.java:

    package com.jay.example.framelayoutdemo2;

    import android.os.Bundle;

    import android.view.MotionEvent;

    import android.view.View;

    import android.view.View.OnTouchListener;

    import android.widget.FrameLayout;

    import android.app.Activity;

    public class MainActivity extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    FrameLayout frame = (FrameLayout) findViewById(R.id.mylayout);

    final MeziView mezi = new MeziView(MainActivity.this);

    //为我们的萌妹子添加触摸事件监听器

    mezi.setOnTouchListener(new OnTouchListener() {

    @Override

    public boolean onTouch(View view, MotionEvent event) {

    //设置妹子显示的位置

    mezi.bitmapX = event.getX() - 150;

    mezi.bitmapY = event.getY() - 150;

    //调用重绘方法

    mezi.invalidate();

    return true;

    }

    });

    frame.addView(mezi);

    }

    }

    代码解释: 见步骤,很简单,就是自定义一个View类,重写重绘方法,接着在Activity中为他添加一个触摸时间在触摸时间中重写onTouch方法获取点击焦点,另外还需要-150,不然那个坐标是自定义View的左上角,接着调用invalidate( )重绘方法,最后添加到帧布局中而已!

    3)跑动的萌妹子

    效果图如下:

    f6249ae56a9c7741a6639cff4b7ecfdf.png

    实现流程:

    step 1:定义一个空的FrameLayout布局,将前景图像的位置设置为中央位置

    step 2:在Activity中获取到该FrameLayout布局,新建一个Handler对象,重写handlerMessage()方法,调用图像- 更新的方法

    step 3:自定义一个move()方法,通过switch动态设置前景图片显示的位图

    step 4:在onCreate()方法中新建一个计时器对象Timer,重写run方法,每隔170毫秒向handler发送空信息

    实现代码如下:

    布局文件:main_activity.xml:

    xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/myframe"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:foregroundGravity="center">

    MainActivity.java:

    package com.jay.example.framelayoutdemo3;

    import java.util.Timer;

    import java.util.TimerTask;

    import android.os.Bundle;

    import android.os.Handler;

    import android.os.Message;

    import android.view.View;

    import android.view.View.OnClickListener;

    import android.widget.FrameLayout;

    import android.app.Activity;

    import android.graphics.drawable.Drawable;

    public class MainActivity extends Activity {

    //初始化变量,帧布局

    FrameLayout frame = null;

    //自定义一个用于定时更新UI界面的handler类对象

    Handler handler = new Handler()

    {

    int i = 0;

    @Override

    public void handleMessage(Message msg) {

    //判断信息是否为本应用发出的

    if(msg.what == 0x123)

    {

    i++;

    move(i % 8 );

    }

    super.handleMessage(msg);

    }

    };

    //定义走路时切换图片的方法

    void move(int i)

    {

    Drawable a = getResources().getDrawable(R.drawable.s_1);

    Drawable b = getResources().getDrawable(R.drawable.s_2);

    Drawable c = getResources().getDrawable(R.drawable.s_3);

    Drawable d = getResources().getDrawable(R.drawable.s_4);

    Drawable e = getResources().getDrawable(R.drawable.s_5);

    Drawable f = getResources().getDrawable(R.drawable.s_6);

    Drawable g = getResources().getDrawable(R.drawable.s_7);

    Drawable h = getResources().getDrawable(R.drawable.s_8);

    //通过setForeground来设置前景图像

    switch(i)

    {

    case 0:

    frame.setForeground(a);

    break;

    case 1:

    frame.setForeground(b);

    break;

    case 2:

    frame.setForeground(c);

    break;

    case 3:

    frame.setForeground(d);

    break;

    case 4:

    frame.setForeground(e);

    break;

    case 5:

    frame.setForeground(f);

    break;

    case 6:

    frame.setForeground(g);

    break;

    case 7:

    frame.setForeground(h);

    break;

    }

    }

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    frame = (FrameLayout) findViewById(R.id.myframe);

    //定义一个定时器对象,定时发送信息给handler

    new Timer().schedule(new TimerTask() {

    @Override

    public void run() {

    //发送一条空信息来通知系统改变前景图片

    handler.sendEmptyMessage(0x123);

    }

    }, 0,170);

    }

    }

    代码解析: 代码也很简单,就是定义一个handler对象来刷新帧布局的前景图像,定义一个Timer定时器每隔170毫秒发送定时信息,i++;move(i%8);这里是因为我们使用8个图片作为动画素材!

    本节小结

    本节介绍了下FrameLayout(帧布局),主要掌握foreground和foregroundGravity属性的使用即可!帧布局比前面的表格布局用得稍微多一点!有兴趣可以像笔者这样写点小例子试试!

    展开全文
  • 一、常见界面布局及案例 二、常见界面控件及案例 三、Activity
  • FrameLayout(帧布局

    千次阅读 2019-05-29 08:51:49
    Android的页面布局小结关于布局布局举例LinearLayout---线性布局RelativeLayout---相对布局FrameLayout---帧布局TableLayout---表格布局AbsoluteLayout---绝对布局 关于布局 Android程序中界面是通过布局文件设置的...
  • Android Studio 的帧布局(Framelayout)

    千次阅读 2021-10-17 20:06:08
    3、在Framelayout下方设置帧布局容器的前景图像(始终在所有子控件之上)android:foreground =“一张图片或一种颜色” 设置前景图像显示位置android:foregroundGravity =“左边或者右边或其他位置” ...
  • android布局控件总结

    2015-11-26 09:31:48
    FrameLayout 帧布局、框架布局 创建一个空白区域, 一个区域成为一帧 TableLayout 表格布局 采用 行, 列 形式管理组件,添加TableRow 和 组件 就可以控制表格的行数和列数 GridLayout 网格布局 设置行列来装填控件 ...
  • 1.2 布局的种类:线性布局(LinearLayout)、相对布局(RelativeLayout)、帧布局(FrameLayout)、表格布局(TableLayout)、网格布局(GridLayout)、约束布局(ConstraintLayout)其中三种不常用布局帧布局、...
  • 简介:LinearLayout 布局,中文线性布局,其主要特征是主要以水平火垂直方式来显示页面中的控件,水平:从左到右,垂直:从上到下,线性布局中,每行或者每列仅允许有一个视图或者控件。 主要属性: android:...
  • FrameLayout(帧布局的两种实现效果) 本节引言 FrameLayout(帧布局)可以说是六大布局中最为简单的一...帧布局的大小由控件中最大的子控件决定,如果控件的大小一样大的话,那么同一时刻就只能看到最上面的那个组件!后续...
  • 1. 什么是布局 就是把界面中的控件按照某种规律摆放到指定的位置。 2. 布局的二种实现 代码 xml配置文件:res/layout目录下 注:也可以同时使用xml和代码 首先用线性布局写一个案例 orientation="vertical|...
  • 文章目录LinearLayout :线性布局android:layout_gravity :控件的对齐方式android:layout_weight:权重 LinearLayout :线性布局 线性布局有水平、垂直两种排列方式: android:orientation="vertical" :垂直方向...
  • FrameLayout帧布局,简单的说FrameLayout中的元素总是以屏幕的左上角层叠在一起,但是,这里就存在了一个问题,如何让控件显示在屏幕的中间呢? 事实上,我们可以对子元素添加android:layout_gravity属性来设置...
  • 线性布局<LinearLayout>: 主要以水平或垂直方式来显示界面中的控件。当控件水平排序时,显示顺序为从左到右;当控件垂直排序时,显示顺序为从上到下。 线性布局中两个重要属性 orientation 设置排序方式...
  • 一.android中五大布局相当于是容器,这些容器里可以放控件也可以放另一个容器,子控件布局都需要制定属性。1.相对布局:RelativeLayout@1控件默认堆叠排列,需要制定控件的相对位置效果:2.线性布局:LinearLayout...
  • 前面文章有讲过Android布局中常用的线性布局和相对...如上图类似这种布局就是帧布局,后面的元素直接覆盖在前面的元素之上,将前面的元素部分和全部遮挡 常用属性 android:layout_gravity="center"//控...
  • FrameLayout的理解基本使用FrameLayout(帧布局)1、动机2、定义3、android:layout_gravity和android:gravity的使用区别4、基本使用参考 FrameLayout(帧布局) 1、动机 我想在ImageView 上面放置textview 控件,来显示...
  • Android:使用帧布局实现霓虹灯效果

    千次阅读 2018-11-05 19:52:53
    使用帧布局实现霓虹灯效果,要求用到线程,能显示变换不同的颜色的霓虹灯动画效果。 效果图 布局文件 主布局文件运用了FrameLayout布局和七个不同大小的TextView,内容居中显示,即layout_gravity=“center” &...
  • 今天这篇博客就总结一下Android中常用的基本控件以及布局方式。说到布局方式Android和iOS还是区别挺大的,在iOS中有Frame绝对布局和AutoLayout相对布局。而在Android中的布局方式就比较丰富了,今天博客中会介绍四种...
  • Android帧布局

    千次阅读 2018-01-12 15:31:37
    1.(FrameLayout)帧布局 可以说是最简单的一个布局,它其实就是在屏幕上开辟出了一块空白的区域,添加的子控件默认放到这块区域的左上角,会重叠,大小由最大子空间来决定,如果一样大只显示最上面的那个控件。 ...
  • 安卓常见的UI布局控件的使用

    千次阅读 多人点赞 2019-07-08 16:27:31
    布局的介绍: View类的常用xml属性: LinearLayout RelativeLayout Android UI控件及UI组件 基本控件:——TextView: 基本控件:——EditText: 基本控件:——Button: ...
  • android常用布局控件

    千次阅读 2022-04-15 21:40:09
    android常用布局控件
  • FrameLayout 是最简单的一种布局,没有任何定位方式,当往里面添加控件的时候,会默认把它们放到这块区域的左上角,帧布局的大小由控件中最大的子控件决定,如果控件的大小一样大的话,那么同一时刻就只能看到最上面...
  • FrameLayout帧布局 AbsoluteLayout绝对布局 TableLayout表格布局 GridLayout网格布局 TableLayout表格布局 TableLayout的介绍 TableLayout是将子类向分别排列成行和列的布局视图容器,Table...
  • Android 布局控件

    2020-10-28 16:39:38
    一、Android七大布局 共7种布局,其中LInearLayout、RelativeLayout、ConstraintLayout比较常用,FrameLayout偶尔会用,GridLayout、TableLayout很少用,absoluteLayout基本不用。...帧布局(FrameLayo
  • 帧布局是Android布局中最简单的一种,两分钟即可掌握。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,593
精华内容 4,637
关键字:

帧布局的子控件