Динамическое окрашивание рисованной фигуры в Android - PullRequest
0 голосов
/ 28 сентября 2018

Я работаю над приложением, которое выглядит как термостат, и я использую эту библиотеку для изогнутой панели поиска, чтобы установить температуру: https://github.com/MarcinMoskala/ArcSeekBar Вот как приложение выглядит прямо сейчас: MainScreen

Проблема в том, что я хотел бы динамически установить цвет большого пальца, чтобы он был одним из тех, которые определены в массиве в отдельном файле ресурсов colors.xml при перетаскивании панели поиска.

<string-array name="colors">
    <item name="0">#2b3db4</item>
    <item name="1">#2b3db4</item>
    <item name="2">#00d9ff</item>
    <item name="4">#00ff22</item>
    <item name="5">#ddff00</item>
    <item name="6">#ff9500</item>
    <item name="7">#ff0d00</item>
</string-array>

Большой палец панели поиска определяется как нарисованный объект в виде вихря с сплошным белым цветом, а затем задается на строке поиска как атрибут xml в файле ресурсов макета:

<com.marcinmoskala.arcseekbar.ArcSeekBar
            app:thumb="@drawable/thumb"
            android:layout_gravity="center_horizontal"
            android:id="@+id/seekArc"
            android:layout_width="300dp"
            android:layout_height="150dp" />

Это код для рисования:

<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">

<solid
android:color="@color/colorWhite"/>
<size
android:width="24dp"
android:height="24dp"/>
</shape>

И в основном упражнении я инициализирую нарисованный объект drawable , который затем в вызывает *В методе 1019 *, который вызывается при каждом перетаскивании панели поиска, цвет фона ползунка и соответствующее значение температуры (на данный момент от 0 до 6) задается в текстовом представлении в верхней части панели поиска.:

public class MainActivity extends AppCompatActivity {

public static int COLOR;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final GradientDrawable drawable = (GradientDrawable)getResources().getDrawable(R.drawable.thumb);
    final ArcSeekBar arcSeekBar = findViewById(R.id.seekArc);
    final TextView temperature=(TextView)findViewById(R.id.temperature_text);
    arcSeekBar.setProgressBackgroundColor(getResources().getColor(R.color.colorBackground));
    arcSeekBar.setProgressBackgroundWidth(0);
    arcSeekBar.setProgressWidth(2);
    arcSeekBar.setMaxProgress(6);



    final String[] gradColors = getResources().getStringArray(R.array.colors);
    int progress = arcSeekBar.getProgress();
    arcSeekBar.setOnProgressChangedListener(new ProgressListener() {
        @Override
        public void invoke(int i) {
            Log.i("Value=","is = "+i);
            Log.i("Color=","is = "+gradColors[i]);
            arcSeekBar.setProgressColor(Color.parseColor(gradColors[i]));
            drawable.setColor(Color.parseColor(gradColors[i]));
            temperature.setText(Integer.toString(i));

        }
    });
}

}

Это ссылка на проект, если кто-то захочет взглянуть.Любая обратная связь приветствуется.

https://drive.google.com/file/d/1T9F23zFbQycKYg-_4tRmSY9XwEXDobFj/view?usp=sharing

...