gpt4 book ai didi

android - SeekBar:ProgressDrawable 仅在第一次进度更改后显示

转载 作者:行者123 更新时间:2023-11-30 04:23:38 26 4
gpt4 key购买 nike

我想实现一个非常适合我的应用程序的简单 hsv 颜色选择器。作为已知的颜色选择器,我想根据其他 seekBars 的值更改 seekBars 的背景。

但是当我开始 Activity 时,我看到了这个:

enter image description here

在第一次触摸其中一个 seekBars 之后(无论是哪个)我得到了这个结果并且在第一次触摸之后布局保持这样并且不会随着进一步的触摸而改变(这也是我根据我的预期布局,上面的 2 个 seekBars 是 20dip,下面的 1 个和拇指一样高):

enter image description here

如第二张图片所示,我希望从一开始就拥有 seekBar。

这里是我的布局:

<SeekBar
android:id="@+id/SbColorPickerHue"
android:layout_width="match_parent"
android:layout_height="20dip"
android:max="360"
android:thumb="@drawable/colorpickerthumb" />
<SeekBar
android:id="@+id/SbColorPickerSaturation"
android:layout_width="match_parent"
android:layout_height="20dip"
android:max="255"
android:thumb="@drawable/colorpickerthumb"/>
<SeekBar
android:id="@+id/SbColorPickerValue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="255"
android:thumb="@drawable/colorpickerthumb"/>

在 onProgressChanged() 中使用 OnSeekBarChangeListener,当然在 onCreate 中(以初始化 seekBars)我正在调用以下函数(为了确保您的大量代码仅显示 Hue Gradient):

    private void setGradients() {
mHueGradient = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,mColors);
mHueGradient.setGradientType(GradientDrawable.LINEAR_GRADIENT);
mHueGradient.setCornerRadius(mRadius);
mHueGradient.setStroke(mStrokeWidth, mStrokeColor);
mSbHue.setBackgroundDrawable(mHueGradient);
}

我已经尝试了很多不同的东西:

  • 在 onCreate 中设置两次渐变
  • 在 onRescume 中再次设置渐变
  • 从布局 xml 中可以看出,我将一些 SeekBar 设置为固定高度 (20dp),将其他设置为 wrap_content。行为发生了一点变化(如图所示)。但仍然不令人满意。
  • 使 seekBar 或 Drawable 无效
  • 强制布局
  • 测量可绘制对象

结果总是一样的。

我在这里做错了什么?我错过了什么吗?

编辑 1:

SeekBar 和 ChangeListener 定义如下:

    mSbHue = (SeekBar)findViewById(R.id.SbColorPickerHue);
setGradients();
mSbHue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar seekBar) {
}

public void onStartTrackingTouch(SeekBar seekBar) {
}

public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
setGradients();
}
});

最佳答案

如果您将 setGradients() 移到监听器之后它会起作用。

mSbHue = (SeekBar)findViewById(R.id.SbColorPickerHue);
mSbHue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar seekBar) {
}

public void onStartTrackingTouch(SeekBar seekBar) {
}

public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
setGradients();
}
});
setGradients();

关于android - SeekBar:ProgressDrawable 仅在第一次进度更改后显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8886856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com