动态更改背景颜色(Android)

3

I have the following code:

public class MainActivity extends Activity {

private BufferedReader br;
private Socket s;
private View v,v1;
private RelativeLayout rl;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    try {
        s = new Socket("192.168.1.36",50000);
        br = new BufferedReader(new InputStreamReader(s.getInputStream()));
    }catch(Exception e){e.printStackTrace();}
    color();
}


private void color(){

    rl = (RelativeLayout) this.findViewById(R.id.rellay);
    while(true){
        try{

            String received = br.readLine();
            if(received != null){
            //  System.out.println(received);
            String[] color = received.split(",");
                            setColor(color);

            }
        }catch(Exception e){e.printStackTrace();}
    }
}
private void setColor(String[] color){
    rl = (RelativeLayout) this.findViewById(R.id.rellay);
    int red = Integer.parseInt(color[0]); 
    int green = Integer.parseInt(color[1]);
    int blue = Integer.parseInt(color[2]);
    int a = Integer.parseInt(color[3]);
    rl.setBackgroundColor(Color.argb(a, red, green, blue));

我想要做的是接收由逗号分隔的4个值(这个没问题),并将范围在0-255之间的值转换成RGB颜色。

我想要改变Android活动的背景。我可以从onCreate()方法中更改一次颜色,但当我尝试再次更改时,会出现默认的白屏。数值永远不会超过255。

怎么才能做到呢?谢谢!


2
这个架构真的非常糟糕,而且你也不应该在主线程上进行网络活动。此外,没有错误捕获,所以只是时间问题。如果你需要帮助,请发布你的日志记录,这样我们可以看到出了什么问题。而且,当你发布这些糟糕的问题时,让你的同事们点赞并不符合SO的精神。 - Nick Cardoso
我知道它可能没有一个非常好的结构。我只想知道如何在应用程序每次从套接字接收到值时更改活动的背景颜色。没有任何异常发生,它只是不改变颜色(仍然是白色)。我是Android的初学者,我已经尝试了许多其他方法来改变颜色,但是它们都没有起作用。 - Pere Garau Burguera
@PereGarauBurguera 在你的 setColor 函数中加入 Log.d("tag", color.toString()) 并检查输入参数。Alpha 值必须大于 0 才能显示,alpha == opacity != transparency - frogatto
是的,接收到的值大于0。如果我在OnCreate方法中执行rl.setBackgroundColor(Color.argb(Some Color));一次更改颜色后,如果我不执行color()函数,则保持该颜色。但是,如果我执行color()函数,我会得到一个白屏(而且我正在接收可见颜色)。 - Pere Garau Burguera
1个回答

0

请确保 alpha 值不等于 0。 alpha 值代表颜色的透明度,因此 0 表示完全透明。 尝试从固定值开始,例如:

rl.setBackgroundColor(Color.argb(255, 0, 0, 0));

确保它正常工作。 然后,从服务器中提取您的值并将其解析为颜色。

顺便说一句,请听Nick Cardoso的评论,感觉到网络延迟是糟糕的用户体验。


请查看我上面的评论。我的 alpha 值大于 0。 - Pere Garau Burguera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接