Java:使用数组中的十六进制值延迟更改背景颜色

标签 java android colors delay

我需要使用存储在字符串数组transmitArray中的十六进制颜色代码值来更改空白ImageView的颜色,并在TransmitFreq中指定延迟。但是,当我运行代码时,仅显示第一种颜色(对应于第一个数组值)。

我尝试了三种方法,即(thread.sleep)、倒计时器和post.delayed,但没有成功。如果有人能指出我做错了什么,我将不胜感激。

public class Main2Activity extends AppCompatActivity  {

    String [] transmitArray;
    long transmitFreq;
    public static int i;
    public static View colourView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.content_main2);
        final String transmitArray [] = getIntent().getStringArrayExtra("COLOUR_DATA");
        transmitFreq = getIntent().getLongExtra("FREQ_VALUE", 0);
        int arrayLength = transmitArray.length;

        colourView = findViewById(R.id.colourBox);

       /*
       //Method 1: Using Countdown timer

        new CountDownTimer(transmitFreq*(transmitArray.length), transmitFreq) {

            public void onTick(long millisUntilFinished) {
                colourView.setBackgroundColor(Color.parseColor(transmitArray[i]));
                i++;
            }

            public void onFinish() {
                i=0;
            }
        }.start();

        //Method 2: Using post.delayed

        Handler handler = new Handler();
        for (i = 0; i < arrayLength ; i++) {
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    String transmitColour = transmitArray[i];
                    colourView.setBackgroundColor(Color.parseColor(transmitColour));
                }
            }, transmitFreq);
        }*/

        //Method 3: Using thread.sleep

        for (i = 0; i < arrayLength ; i++) {
            String transmitColour = transmitArray[i];
            colourView.setBackgroundColor(Color.parseColor(transmitColour));
            try {
                Thread.sleep(transmitFreq);                
            } catch(InterruptedException ex) {
                Thread.currentThread().interrupt();
            }
        }

    }
}

最佳答案

您最初可以在 onCreate 方法内使用默认颜色,然后在 OnCreate 方法外尝试 3 个方法。试试这个代码

public class Main2Activity extends AppCompatActivity  {

String [] transmitArray;
long transmitFreq;
public static int i;
public static View colourView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.content_main2);

    colourView = findViewById(R.id.colourBox);
}

final String transmitArray [] = getIntent().getStringArrayExtra("COLOUR_DATA");
    transmitFreq = getIntent().getLongExtra("FREQ_VALUE", 0);
    int arrayLength = transmitArray.length;


 /*
   //Method 1: Using Countdown timer

    new CountDownTimer(transmitFreq*(transmitArray.length), transmitFreq) {

        public void onTick(long millisUntilFinished) {
            colourView.setBackgroundColor(Color.parseColor(transmitArray[i]));
            i++;
        }

        public void onFinish() {
            i=0;
        }
    }.start();

    //Method 2: Using post.delayed

    Handler handler = new Handler();
    for (i = 0; i < arrayLength ; i++) {
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                String transmitColour = transmitArray[i];
                colourView.setBackgroundColor(Color.parseColor(transmitColour));
            }
        }, transmitFreq);
    }*/

    //Method 3: Using thread.sleep

    for (i = 0; i < arrayLength ; i++) {
        String transmitColour = transmitArray[i];
        colourView.setBackgroundColor(Color.parseColor(transmitColour));
        try {
            Thread.sleep(transmitFreq);                
        } catch(InterruptedException ex) {
            Thread.currentThread().interrupt();
        }
    }
}

关于Java:使用数组中的十六进制值延迟更改背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39622511/

相关文章:

java - 用于rollingFileAppender 的log4jappender.setAppend 不起作用?

java - JMX操作可以将接口(interface)作为参数吗?

java - 无法通过android studio连接azure数据库

java - 使用导航组件传递数据 - 为什么我需要构造函数的值,而指南不需要?

java - 在具体类中实现抽象方法

android - Parse.com 查询 getFirst() 异常

html - HTML 文件中的背景颜色没有改变

android - EditText 颜色光标和标记

wpf - 如何绑定(bind)到渐变停止 WPF

android - 从 AndroidTestProject 加载文本文件