FrameLayout和handle实现霓虹灯效果

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

布局文件

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    >

    <!-- 先定义的TextView在下面,后定义的在上面 -->
    <TextView
        android:id="@+id/textView01_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:width="320dp"
        android:height="320dp"
        android:layout_gravity="center"
        android:background="#f00"/>

    <TextView
        android:id="@+id/textView02_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:width="280dp"
        android:height="280dp"
        android:layout_gravity="center"
        android:background="#0f0"/>

    <TextView
        android:id="@+id/textView03_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:width="240dp"
        android:height="240dp"
        android:layout_gravity="center"
        android:background="#00f"/>

    <TextView
        android:id="@+id/textView04_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:width="200dp"
        android:height="200dp"
        android:layout_gravity="center"
        android:background="#ff0"/>   

    <TextView
        android:id="@+id/textView05_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:width="160dp"
        android:height="160dp"
        android:layout_gravity="center"
        android:background="#f0f"/>

    <TextView
        android:id="@+id/textView06_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:width="120dp"
        android:height="120dp"
        android:layout_gravity="center"
        android:background="#0ff"/>

</FrameLayout>

values中的

color.xml

<resources>
    <color name="color01">#f00</color>
    <color name="color02">#0f0</color>
    <color name="color03">#00f</color>
    <color name="color04">#ff0</color>
    <color name="color05">#f0f</color>
    <color name="color06">#0ff</color>

</resources>

MainActivity.java

package com.kale.framelayout;

import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBarActivity;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

    private int currentColor = 0;
    final int[] colors = new int[] {
            R.color.color01,
            R.color.color02,
            R.color.color03,
            R.color.color04,
            R.color.color05,
            R.color.color06
    };
    final int[] names = new int[] {
            R.id.textView01_id,
            R.id.textView02_id,
            R.id.textView03_id,
            R.id.textView04_id,
            R.id.textView05_id,
            R.id.textView06_id,
    };
    TextView[] views = new TextView[names.length];
    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            //表明消息来自本程序
            System.out.println(msg.what);
            if(msg.what == 0x123) {
                for(int i = 0 ;i<names.length;i++) {
                    views[i].setBackgroundResource(colors[(i+currentColor)%names.length]);
                }
                currentColor++;
            }
            super.handleMessage(msg);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        for (int i = 0; i < names.length; i++) {
            views[i] = (TextView)findViewById(names[i]);

        }
        //定义一个线程周期性的改变currentColor变量的值
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                //发送一条空消息来通知系统改变颜色
                handler.sendEmptyMessage(0x123);
                System.out.println("发送了条消息");
            }
        }, 0,1000);

    }

}

FrameLayout和handle实现霓虹灯效果

时间: 2024-11-05 14:34:12

FrameLayout和handle实现霓虹灯效果的相关文章

帧布局实现霓虹灯效果

Framelayout即帧布局,使用这种布局可以把几个控件叠加在一起.使用Framelayout结合textview就可以实现一个简单的霓虹灯效果. 一.首先在XML中使用了FrameLayout布局并添加六个TestView文件,并设定了颜色和位置. XML布局如下: <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.and

android 霓虹灯效果

package com.example.test; import java.util.Timer; import java.util.TimerTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.view.Menu; import android.widget.TextView; publi

Android突击:FrameLayout制作霓虹灯效果

1,FrameLayout的层叠嵌套,类似于Photoshop的图层.可以实现类似霓虹灯的效果. 代码大致如下: 首先是main.xml: 主要是几个TextView用来填充,使用的是FrameLayout的布局. <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android&quo

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实现霓虹灯效果

轮换帧布局中7个TextView的背景颜色,会出现上面颜色渐变不断变换. 首先在main.xml文件中进行布局 总体布局为framelayout 中间有7个Textview,代表7种不同的颜色,可以看到高度相同,宽度逐渐减少,则最新添加的textvIEW不会被完全遮挡,设置了颜色渐变 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="v

SVG霓虹灯效果

地铁上逛segmentfault看到一篇用纯css和SVG来实现的很赞的效果,觉得拿来做一些开场效果动画应该不错. 原文地址:https://segmentfault.com/a/1190000010963326 觉得很有趣,正好925快到了,就撸了一个生日快乐的 效果图如下: 就像是一圈圈蚂蚁在它身上爬.....emmmmm奇特的比喻 fill:none;可以让图形不被填充,如果不添加这一属性,则默认填充颜色是black,这个效果 发现stroke这一系列属性都很有意思啊,填充啊透明度和str

iOS 霓虹灯效果

总体思路如下: 利用for 循环创建N个view,并将他们添加到可变数组中,利用NSTimer,实现循环变色的效果(changeColor:),变色的思路:将第i个view 的背景色 和第i + 1 个view 的背景色交换,换完一轮即可,(NSTimer 会自动实现循环) 这里是在试图控制器中写的,所以 把view 添加到self.view里, self.view.subviews(是一个数组(里边是各个VIEW)) - (void)viewDidLoad {    [super viewDi

Color, 霓虹灯效果练习

#import "RootViewController.h" @interface RootViewController (){ CAGradientLayer *gradientLayer; NSTimer *timer; } @end @implementation RootViewController - (void)viewDidLoad { [super viewDidLoad]; UIImageView *imageView = [[UIImageView alloc] i

用UIView写霓虹灯效果。。。NSTimer的使用

首先创建一个视图NioLampViewController类 AppDelegate.h #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @end AppDelegate.m #import "AppDelegate.h" #import &quo