帧布局实现霓虹灯效果

Framelayout即帧布局,使用这种布局可以把几个控件叠加在一起。使用Framelayout结合textview就可以实现一个简单的霓虹灯效果。

一、首先在XML中使用了FrameLayout布局并添加六个TestView文件,并设定了颜色和位置。

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:id="@+id/textView"
        android:layout_gravity="right"
        android:width="160pt"
        android:height="160pt"
        android:background="#f00" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:id="@+id/textView2"
        android:layout_gravity="right"
        android:width="140pt"
        android:height="140pt"
        android:background="#88ff00"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:id="@+id/textView3"
        android:layout_gravity="right"
        android:width="120pt"
        android:height="120pt"
        android:background="#ffffff"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:id="@+id/textView4"
        android:layout_gravity="right"
        android:width="100pt"
        android:height="100pt"
        android:background="#3be407"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:id="@+id/textView5"
        android:layout_gravity="right"
        android:width="80pt"
        android:height="80pt"
        android:background="#ffff88"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:id="@+id/textView6"
        android:layout_gravity="right"
        android:width="60pt"
        android:height="60pt"
        android:background="#8329c7"/>
</FrameLayout>

 

二、便于管理及调用将定义的六种颜色在colors.xml中定义

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="color1">#f00</color>
    <color name="color2">#88ff00</color>
    <color name="color3">#ffffff</color>
    <color name="color4">#3be407</color>
    <color name="color5">#ffff88</color>
    <color name="color6">#8329c7</color>
</resources>

三、MainActivity中主程序代码

package happy.framelayout;

import android.os.Bundle;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {

    private int currentColor = 0 ;
    //定义一个颜色数组
    final int[] colors = new int[]{
            R.color.color1,
            R.color.color2,
            R.color.color3,
            R.color.color4,
            R.color.color5,
            R.color.color6,

    };

    final int[] names = new int[] {
            R.id.textView,
            R.id.textView2,
            R.id.textView3,
            R.id.textView4,
            R.id.textView5,
            R.id.textView6,
    };
    TextView[] views = new TextView[names.length ] ;
    //handler主要接收主线程发送的数据,并用此数据配合主线程更新UI
    android.os.Handler handler = new android.os.Handler()
    {
        @Override
        public void handleMessage(Message msg)
        {
            // 表明消息来自本程序所发送
            if (msg.what == 0x234)
            {
                //依次改变testView的背景
                for (int i = 0; i < names.length; i++)
                {
                    //收到一条msg就开始改变一次views的颜色(六个都依照colors的+currentcolor颜色来改)
                    views[i].setBackgroundResource(colors[(i
                            + currentColor)    % names.length]);
                }
                currentColor++;
            }
            //将消息抛给父类,避免丢失
            super.handleMessage(msg);
        }
    };
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
        for (int i = 0; i < names.length; i++)
        {
            //为views设置初始颜色,(六个TestView)
            views[i] = (TextView) findViewById(names[i]);
        }
        // 定义一个线程周期性地改变currentColor变量值
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                // 发送一条空消息通知系统改变6个TextView组件的背景色
                handler.sendEmptyMessage(0x234);
            }
        }, 0, 200);

    }
}

四、动态霓虹灯效果

时间: 2024-08-07 20:03:51

帧布局实现霓虹灯效果的相关文章

Android 帧布局FrameLayout之霓虹灯效果

FrameLayout的常用XML属性及相关方法 XML 属性       相关属性 说明 android:foreground setForeground(Drawable) 设置该帧布局容器的前景图像 android:foregroundGravity setForegroundGravity(int) 定义绘制前景图像的gravity属性 帧布局的页面定义文件: 1 <?xml version="1.0" encoding="utf-8"?> 2

Android 自学之帧布局 FrameLayout

帧布局(FrameLayout)直接继承了ViewGroup组件: 帧布局容器为每一个加入其中的组件都创建了一个空白的区域,这个区域我们称之为一帧,所有每个组件都占据一帧,这些都会根据gravity属性执行自动对齐. FrameLayout的常用XML属性及相关的方法: XML属性 相关方法 说明 android:foreground setForeground(Drawable) 设置该帧布局容器的前景图像 android:foregroundGravity setForegroundGrav

FrameLayout和handle实现霓虹灯效果

这个程序的主要思想就是在一个FrameLayout中定义多个TextView,分别设置不同的背景色.因为帧布局的特性,所以这些控件都是叠加起来的.然后,通过定时器循环给handler发送消息,改变控件的背景色.最后就能实现霓虹灯的效果了,本实例不怎么实用,仅仅能做一般练习而已. 布局文件 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://

Android精通:TableLayout布局,GridLayout网格布局,FrameLayout帧布局,AbsoluteLayout绝对布局,RelativeLayout相对布局

在Android中提供了几个常用布局: LinearLayout线性布局 RelativeLayout相对布局 FrameLayout帧布局 AbsoluteLayout绝对布局 TableLayout表格布局 GridLayout网格布局 TableLayout表格布局 TableLayout的介绍 TableLayout是将子类向分别排列成行和列的布局视图容器,TableLayout是由许多TableRow对象组成的,表格布局以行列的形式管理子控件,每一个单元是一个TableRow或者Vie

Android 基于帧布局实现一个进度条 FrameLayout+ProgressBar

在FrameLayout中添加一个ProgressBar居中 <ProgressBar android:layout_gravity="center" android:id="@+id/progressBar1" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height=&qu

【Android】第7章(7)FrameLayout(帧布局)

分类:C#.Android.VS2015: 创建日期:2016-02-11 一.简介 帧布局是显示多个层次图的有效手段.比如第3章介绍的百度地图就是利用帧布局来实现的,它将图层分为22级分别缓存到指定的文件夹下,程序根据用户对地图的放大程度,自动判断应该将哪一级作为最顶层的图层.另外,地图覆盖物功能也是利用它来实现的. 帧布局的特点是:所有元素都会从容器的左上角开始放置,第一个添加的元素被放在最底层,最后一个添加的元素放在在最顶层.默认情况下,上一层的元素会覆盖下一层的元素,除非不同层元素的大小

Android【布局管理器】——帧布局FrameLayout

帧布局FrameLayout在Android的五大布局中是最简单的布局方式,在需要布局中的控件有重叠的情况下才使用. FrameLayout是一个轻量级的布局控件,Relativelayout能完全的实现FrameLayout的功能,所以在选择的时候就需要自己好好设计了. 在使用FrameLayout的时候,发现布局里面的控件设置layout_margin类的属性没有效果.后来百度一下才知道FrameLayout中的控件layout_margin设置要依赖layout_gravity属性,否则l

Android中帧布局-FrameLayout和网格布局-GridLayout

帧布局-FrameLayout 一.概念 帧布局中,容器为每个加入其中的空间创建一个空白的区域(成为一帧).每个空间占据一帧,这些帧会按gravity属性自动对齐. 帧布局的效果是将其中的所有空间叠加在一起. 二.常用属性 1.layout_gravity属相值列表 top,顶端. tottom,底端对齐. left,左端对齐. right,右端对齐. center,水平,垂直同时居中, center_vertical,垂直方向居中, center_horizontal,水平方向居中, fill

andorid之帧布局FrameLayout

FrameLayout(帧布局) :layout/activity_main.xml <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_