IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 安卓基础学习 Day16|帧式布局+实现自动切换颜色 -> 正文阅读

[移动开发]安卓基础学习 Day16|帧式布局+实现自动切换颜色

目录

一、提出要求

二、实现过程?

1.帧式布局常用的属性

2.字符串资源文件

3.主布局资源文件

4.主界面

5.实现结果

6.实现自动跳转

(1)修改主布局资源文件

(2) 修改主界面代码


一、提出要求

点击一次切换一次颜色

单击开始后颜色发生循环跳转,再次点击颜色切换加快,单击停止后颜色停止跳转

二、实现过程?

1.帧式布局常用的属性

scrollbars  滚动条  vertical|none|horizontal     background 背景

2.字符串资源文件

3.主布局资源文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

        <TextView
            android:id="@+id/tvBottom"
            android:layout_width="300dp"
            android:layout_height="300dp"
            android:layout_gravity="center"
            android:background="#ff0000"
            android:text="@string/bottom"
            android:textColor="#ffff00"
            android:textSize="30sp"/>

    <TextView
        android:id="@+id/tvMiddle"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_gravity="center"
        android:background="#00ff00"
        android:text="@string/middle"
        android:textColor="#ffff00"
        android:textSize="30sp"/>

    <TextView
        android:id="@+id/tvTop"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:background="#0000ff"
        android:text="@string/top"
        android:textColor="#ffff00"
        android:textSize="30sp"/>
    
    <Button
        android:id="@+id/btnSwitchColor"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:onClick="doSwitch_color" 
        android:text="@string/switch_color"
        android:textSize="20sp"/>
</LinearLayout>

首先将改成线性布局LinearLayout

然后写一个帧式布局FrameLayout的标签

4.主界面

通过switch-case来设置点击不同的次数跳动不同的颜色

package net.lzt.framelayout;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    //声明变量
    private TextView tvBottom;
    private TextView tvMiddle;
    private TextView tvTop;
    private int clickCount;
    private int[] colors;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);
        //通过资源标识符获取控件实例
        tvBottom = findViewById(R.id.tvBottom);
        tvMiddle = findViewById(R.id.tvMiddle);
        tvTop = findViewById(R.id.tvTop);
    }

    //单击切换颜色处理事件
    public void doSwitch_color(View view) {
        //累加按钮单击次数
        clickCount++;
        //单击次数三次求余
        clickCount = clickCount % 3;
        //判断次数是0、1、2
        switch (clickCount) {
            case 0:
                //红-禄-蓝
                colors = new int[]{Color.RED, Color.GREEN, Color.BLUE};
                break;
            case 1:
                //绿-蓝-红
                colors = new int[]{Color.GREEN, Color.BLUE, Color.RED};
                break;
            case 2:
                //蓝-红-绿
                colors = new int[]{Color.BLUE, Color.RED, Color.GREEN};
                break;
        }

        //根据切换后的颜色数组来设置三层标签的颜色
        tvBottom.setBackgroundColor(colors[0]);
        tvMiddle.setBackgroundColor(colors[1]);
        tvTop.setBackgroundColor(colors[2]);
    }
}

注:这里的Color是内部方法直接调用就是

5.实现结果

显然上面的方法使用switch-case有些冗杂

就可以对主界面关于切换颜色的代码进行修改

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    //声明变量
    private TextView tvBottom;
    private TextView tvMiddle;
    private TextView tvTop;
    private int clickCount;
    private int[] colors;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);
        //通过资源标识符获取控件实例
        tvBottom = findViewById(R.id.tvBottom);
        tvMiddle = findViewById(R.id.tvMiddle);
        tvTop = findViewById(R.id.tvTop);

        //切换颜色初始数组
        colors = new int[]{Color.RED, Color.GREEN, Color.BLUE};
    }

    //单击切换颜色处理事件
    public void doSwitch_color(View view) {
        //切换颜色
        int temp = colors[0];
        colors[0] = colors[1];
        colors[1] = colors[2];
        colors[2] = temp;
        //根据切换后的颜色数组来设置三层标签的颜色
        tvBottom.setBackgroundColor(colors[0]);
        tvMiddle.setBackgroundColor(colors[1]);
        tvTop.setBackgroundColor(colors[2]);
    }
}

?实现的效果是相同的但是这样写代码量就更少?

在此还可以利用for循环进行重写

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    //声明变量
    private TextView tvBottom;
    private TextView tvMiddle;
    private TextView tvTop;
    private int clickCount;
    private int[] colors;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);
        //通过资源标识符获取控件实例
        tvBottom = findViewById(R.id.tvBottom);
        tvMiddle = findViewById(R.id.tvMiddle);
        tvTop = findViewById(R.id.tvTop);

        //切换颜色初始数组
        colors = new int[]{Color.RED, Color.GREEN, Color.BLUE};
    }

    //单击切换颜色处理事件
    public void doSwitch_color(View view) {
        //切换颜色
        int temp = colors[0];
        for (int i = 0; i < colors.length - 1; i++) {
            colors[i] = colors[i + 1];
        }
        //循环完成过后返回最开始的
        colors[colors.length - 1] = temp;

        //根据切换后的颜色数组来设置三层标签的颜色
        tvBottom.setBackgroundColor(colors[0]);
        tvMiddle.setBackgroundColor(colors[1]);
        tvTop.setBackgroundColor(colors[2]);
    }
}

这里将刚刚的替换成了for循环来运行,实现的效果也是相同的

6.实现自动跳转

(1)修改主布局资源文件

这里不需要发生大的更改,只需要再添加一个按钮,并将两个按钮进行水平分布就可以了

(2) 修改主界面代码

在单击开始按钮的处理事件中实现单击实现颜色自动跳转

创建线程的两种方式:1.继承Thread对象 重写run方法 2.继承Runnable接口,实现run方法

(关于多线程的相关内容后面我也会发出来)

在单击停止按钮的处理事件中实现单击停止颜色跳转

我们这里采用的是第二种方式,运用Runnable接口:


import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    //声明变量
    private TextView tvBottom;
    private TextView tvMiddle;
    private TextView tvTop;
    private int clickCount;
    private int[] colors;
    private boolean isRunning;
    private Thread thread;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);
        //通过资源标识符获取控件实例
        tvBottom = findViewById(R.id.tvBottom);
        tvMiddle = findViewById(R.id.tvMiddle);
        tvTop = findViewById(R.id.tvTop);

        //切换颜色初始数组
        colors = new int[]{Color.RED, Color.GREEN, Color.BLUE};
    }


    //单击切换颜色处理事件
    public void doSwitch_color(View view) {
        isRunning = true;
        //创建线程,修改颜色数组,发送消息
        MyThread myThread = new MyThread();
        thread = new Thread(myThread);

        thread.start();
    }


    class MyThread implements Runnable {

        @Override
        public void run() {
            while (isRunning) {
                //切换颜色
                int temp = colors[0];
                for (int i = 0; i < colors.length - 1; i++) {
                    colors[i] = colors[i + 1];
                }
                colors[colors.length - 1] = temp;

                tvBottom.setBackgroundColor(colors[0]);
                tvMiddle.setBackgroundColor(colors[1]);
                tvTop.setBackgroundColor(colors[2]);
            }
        }
    }

    public void doStop_color(View view) {
        isRunning = false;
    }
}

这里是可以实现颜色发生自动跳转的,但是,如果连续点两次开始按钮程序就会出错

加上异常处理 ,设置休眠时间

?

实现效果:

?主界面的所有代码:

package net.lzt.framelayout;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    //声明变量
    private TextView tvBottom;
    private TextView tvMiddle;
    private TextView tvTop;
    private int clickCount;
    private int[] colors;
    private boolean isRunning;
    private Thread thread;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);
        //通过资源标识符获取控件实例
        tvBottom = findViewById(R.id.tvBottom);
        tvMiddle = findViewById(R.id.tvMiddle);
        tvTop = findViewById(R.id.tvTop);

        //切换颜色初始数组
        colors = new int[]{Color.RED, Color.GREEN, Color.BLUE};
    }


    //单击切换颜色处理事件
    public void doSwitch_color(View view) {
        isRunning = true;
        //创建MyThread对象
        MyThread myThread = new MyThread();
        //创建Thread对象
        thread = new Thread(myThread);

        //启动线程
        thread.start();
    }

    class MyThread implements Runnable {

        @Override
        public void run() {
            while (isRunning) {
                //切换颜色
                int temp = colors[0];
                for (int i = 0; i < colors.length - 1; i++) {
                    colors[i] = colors[i + 1];
                }
                colors[colors.length - 1] = temp;

                tvBottom.setBackgroundColor(colors[0]);
                tvMiddle.setBackgroundColor(colors[1]);
                tvTop.setBackgroundColor(colors[2]);

                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        }
    }

    public void doStop_color(View view) {
        isRunning = false;
    }
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章           查看所有文章
加:2022-07-04 23:03:58  更:2022-07-04 23:07:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 2:29:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码