安卓霓虹灯效果_第1张图片 API参考地址: http://android.toolib.net/reference/android/widget/FrameLayout. 理解:帧布局容器为每个加入其中的组件创建一个空白的区域(称为一帧),每个子组件占据一帧,这些帧会根据gravity属性执行自动对齐。

FrameLayout常用XML属性及方法

XML属性 相关方法 说明
android:foreground setForeground(Drawable) 设置该帧布局容器的前景图像
android:foregroundGravity setForegroundGravity(int) 定义绘制前景图像的gravity属性

FrameLayout包含的子元素也受FrameLayout.LayoutParams控制,因此它所包含的子元素也可以指定android:layout_gravity 属性

XML布局代码

                            

我们简单来理解下上面代码干的事情

我们使用了FrameLayout布局,并向该布局容器中添加了6个TextView,这6个TextView高度完全相同,而宽度则逐渐减少 这样可以保证最先添加的TextView不会被完全遮挡 而且我们设置了6个不同颜色

调试效果图

安卓霓虹灯效果_第2张图片

霓虹灯效果

package com.example.framelayout;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.graphics.Color;import android.view.Menu;import android.widget.TextView;public class MainActivity extends Activity {private int currentColor = 0;//定义一个颜色数组final int[] colors = new int[] {Color.MAGENTA,Color.BLUE,Color.GREEN,Color.GRAY,Color.YELLOW,Color.RED};//颜色显示组件,view为TextView控件final int[] names = new int[] {R.id.text01,R.id.text02,R.id.text03,R.id.text04,R.id.text05,R.id.text06};/** * 在Activity中创建TextView控件数组 */    TextView[] views = new TextView[names.length];    /**     * Handler 主要接受子线程发送的数据, 并用此数据配合主线程更新UI     */    Handler handler = new Handler(){    @Override    public void handleMessage(Message msg){    // 消息来自本程序所发送    if(msg.what == 0x123){    //循环设置TextView背景颜色    for (int i=0;i

结果:

上面Activity实现了每隔200毫秒更新6个TextView的背景颜色

用到的知识点

1、Handler():主要受子线程发送的数据,并用此数据配合主线程更新UI

      解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是点击一个 Button, Android会分发事件到Button上,来响应你的操作。  如果此时需要一个耗时的操作,例如: 联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,会收到Android系统的一个错误提示
 "强制关闭".  这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,Android主线程是线程不安全的,也就是说,更新UI只能在主线程中更新,子线程中操作是危险的. 这个时候,Handler就出现了来解决这个复杂的问题,由于Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据,这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据)  , 把这些消息放入主线程队列中,配合主线程进行更新UI。

2、Timer()计时器

      ①创建Timer()定时器:timer = new Timer()       ②创建一个TimerTask,实现了Runnable接口,所以TimerTask就是一个子线程      ==========定义计划任务,根据参数的不同可以完成一下种类的工作=========      ① .schedule(TimerTask task, Date when) 在固定时间执行某任务      ② .schedule(TimerTask task, Date when, long period) 在固定时间开始重复执行某任务,重复时间间隔可控      ③ .schedule(TimerTask task, long delay) 在延迟多久后执行某任务      ④ .schedule(TimerTask task, long delay, long period) 在延迟多久后重复执行某任务,重复时间间隔可控     ==========华丽分割线============================     timer.schedule(new TimerTask(),3000,1000); //3秒后开始倒计时,倒计时间隔为1秒

更多相关文章

  1. 后台动态添加布局文件、控件与动态设置属性2
  2. androidUI布局仿猫扑界面
  3. Android Layout 布局 && Android自带样式(theme)&& CheckBox样例 &
  4. 使用Android常用控件与布局实现美观的登录页面
  5. Android消息队列(三)--多线程与消息处理
  6. Android Studio3.1.2在项目的build.gradle中添加百分比布局库的
  7. andorid 将布局文件(layout)转换为图片(Bitmap)简单使用详解
  8. 【Android】UI界面外的线程,控制刷新UI界面

随机推荐

  1. Android系统权限和root权限
  2. 修改android项目sdk版本的方法
  3. Android(安卓)入门 和 环境搭建
  4. iOS 与 Android(安卓)生命周期对比
  5. Android获取当前时间
  6. Android,TextView的所有属性和方法
  7. Android根据 uri 获得文件真实路径
  8. android源码浅析--notification
  9. Android腾讯微博客户端开发一:在下方的Ta
  10. ViewBinding的简单使用