SeekBar RGB 选择器一直停止

SeekBar RGB picker keeps stoping

我正在尝试做一个应用程序,其中有 3 个 SeekBar,在它们下面有 3 个 TextField,它们显示每种颜色的阴影,在它们下面是 TextField,当您移动 SeekBar 时它会改变颜色。当我尝试在手机上吃午饭时,它说应用程序“一直停止”。感谢您的帮助。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity"
    android:orientation="vertical">


    <SeekBar
        android:id="@+id/SB1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="183dp"
        android:max="255"></SeekBar>

    <SeekBar
        android:id="@+id/SB2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="114dp"
        android:max="255"></SeekBar>

    <SeekBar
        android:id="@+id/SB3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="45dp"
        android:max="255"></SeekBar>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:layout_marginTop="279dp">

        <TextView
            android:id="@+id/TVr"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="false"
            android:layout_alignParentTop="false"
            android:layout_gravity="left"
            android:text="R = 0"
            android:textSize="30sp" />

        <TextView
            android:id="@+id/TVg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="false"
            android:layout_alignParentTop="false"
            android:layout_gravity="center"
            android:text="G = 0"
            android:textSize="30sp" />

        <TextView
            android:id="@+id/TVb"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="false"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="false"
            android:layout_gravity="right"
            android:text="B = 0"
            android:textSize="30sp" />

    </LinearLayout>

    <TextView
        android:id="@+id/vysledek"
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="67dp" />

</RelativeLayout>
package com.example.posuvnik;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.TextView;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {

    SeekBar SB1;
    SeekBar SB2;
    SeekBar SB3;
    TextView vysledek;
    TextView TVr, TVb, TVg;

    private int seekR, seekG, seekB;

    public class MySeekBarChangeListener implements SeekBar.OnSeekBarChangeListener {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            switch (seekBar.getId()) {
                case R.id.SB1:
                    seekR = progress;
                    TVr.setText(seekR);
                    break;
                case R.id.SB2:
                    seekG = progress;
                    TVg.setText(seekG);
                    break;
                case R.id.SB3:
                    seekB = progress;
                    TVb.setText(seekB);
                    break;
            }
            int barva = Color.rgb(seekR,seekG,seekB);
            vysledek.setBackgroundColor(barva);
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_color_changer);

        SeekBar sbR = (SeekBar) findViewById(R.id.SB1);
        SeekBar sbG = (SeekBar) findViewById(R.id.SB2);
        SeekBar sbB = (SeekBar) findViewById(R.id.SB3);

        MySeekBarChangeListener msbclR = new MySeekBarChangeListener();
        MySeekBarChangeListener msbclG = new MySeekBarChangeListener();
        MySeekBarChangeListener msbclB = new MySeekBarChangeListener();

        sbR.setOnSeekBarChangeListener(msbclR);
        sbG.setOnSeekBarChangeListener(msbclG);
        sbB.setOnSeekBarChangeListener(msbclB);

    }

}

您没有初始化文本视图...

TVr = findViewById(R.id.TVr); - 为所有 3 个 TextView TVr、TVg、TVb 执行此操作;

还有:

  • 您必须初始化 vysledek。
  • 您必须在 onProgressChanged() 方法中将进度 (seekRseekGseekB) 转换为字符串 - TVr.setText(String.valueOf(seekR));
  • 你的排版也很差。您还没有提到 android:orientation="horizontal" 的方向和 LinearLayout 的定位。