重感情的机器人 · Not able to create ...· 5 月前 · |
稳重的佛珠 · maven lombok ,gson 实现 ...· 1 年前 · |
才高八斗的钢笔 · pyqt qlabel 自动换行-掘金· 1 年前 · |
没读研的冰淇淋 · python - Got ...· 1 年前 · |
细心的火柴 · C#快速调用海康威视工业相机的SDK拍照获取 ...· 1 年前 · |
我已经将ratingBar的颜色设置为不同的颜色,以安卓的默认蓝色和灰色-我已经使我的星星的黑色背景和粉红色,如果他们被选中。
这是我的主要活动代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingbar);
LayerDrawable layerDrawable2 = (LayerDrawable) ratingBar.getProgressDrawable();
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable2.getDrawable(0)),
ContextCompat.getColor(getApplicationContext(), android.R.color.background_dark));
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable2.getDrawable(1)),
ContextCompat.getColor(getApplicationContext(), R.color.colorAccent)); // Partial star
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable2.getDrawable(2)),
ContextCompat.getColor(getApplicationContext(), R.color.colorAccent));
ratingBar.setIsIndicator(false);
ratingBar.setRating(3.6f);
ratingBar.setStepSize(0.1f);
ratingBar.invalidate();
ratingBar.setIsIndicator(true);
}
你可以看到,如果我把评级定为3.6,它会选择最多4。
然而,如果我注释掉我自己定制的颜色,ratingBar将自己正确地设置为只显示第四颗恒星的一部分,就像传递给它的值是3.6:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingbar);
/* LayerDrawable layerDrawable2 = (LayerDrawable) ratingBar.getProgressDrawable();
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable2.getDrawable(0)),
ContextCompat.getColor(getApplicationContext(), android.R.color.background_dark));
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable2.getDrawable(1)),
ContextCompat.getColor(getApplicationContext(), R.color.colorAccent)); // Partial star
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable2.getDrawable(2)),
ContextCompat.getColor(getApplicationContext(), R.color.colorAccent));*/
ratingBar.setIsIndicator(false);
ratingBar.setRating(3.6f);
ratingBar.setStepSize(0.1f);
ratingBar.invalidate();
ratingBar.setIsIndicator(true);
}
为什么如果我创建自己的自定义颜色,ratingBar本身就无法正常填充?
我已经创建了一个小型回购程序,您可以在这里下载并测试它: https://github.com/Winghin2517/RatingBarTest2
编辑:
FlyingPumba的图书馆展示了一些我想要达到的目标,但我需要一种风格,即当星星出现在屏幕上时,它的背景是白色的,当用户按下星星时,它将被一种坚实的颜色填充。在我的例子中,我希望它充满绿色。
以下是我所能达到的目标,但它还没有完全实现。我把星体坐成粉红色的滚动视图背景改为粉红色,这样你就可以看到不是星星的白色背景,而是滚动视图背景中的粉红色。对于我的用例,我希望白色的星星坐在一个图像视图的前面,我不希望图像视图中的图像在星星中闪耀。
另外,我根本不需要星星的白笔,因为我想保持星星的造型简单。
<com.iarcuschin.simpleratingbar.SimpleRatingBar
android:id="@+id/ratingBar3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
app:srb_rating="3.6"
app:srb_fillColor="@color/material_greenA700"
app:srb_borderColor="@color/material_white"
app:srb_starBorderWidth="0"
app:srb_pressedFillColor="@color/material_greenA700"
app:srb_starSize="30dp"
/>
发布于 2016-08-14 07:49:10
你的尝试是正确的。你做错的唯一一件事就是把错误的颜色分配到第二个可绘制的地方。
把第二张图想象成星星的背景,而不是前景。因此,部分恒星需要背景颜色,而不是恒星的颜色,例如,黑色,而不是粉红色。
下面是经过修正的代码,其工作原理如下所述。我对其稍作了修改,以突出所需的更改。
RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingbar);
LayerDrawable layerDrawable2 = (LayerDrawable) ratingBar.getProgressDrawable();
// No star
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable2.getDrawable(0)),
ContextCompat.getColor(getApplicationContext(),
android.R.color.background_dark));
// Partial star
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable2.getDrawable(1)),
ContextCompat.getColor(getApplicationContext(),
// use background_dark instead of colorAccent
// R.color.colorAccent));
android.R.color.background_dark));
// Custom star
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable2.getDrawable(2)),
ContextCompat.getColor(getApplicationContext(),
R.color.colorAccent));
另一种方法(在很多情况下可能更好)是在
RatingBar
上使用适当的样式。
这需要为评等栏设置自定义样式,然后定义该样式用于指向您自己的图像或颜色的图层绘图。
我不打算进一步详细介绍,因为 实际的xml代码如Anantham的回答所示 。
发布于 2016-08-13 07:11:25
在Activity.java中:
oncreate:
RatingBar setRatingBar = (RatingBar) findViewById(R.id.setRating);
float rating = Float.parseFloat(listString);
// onRatingChanged(setRatingBar, 0.0f, true);
public void onRatingChanged(RatingBar rateBar, float rating, boolean fromUser) {
try {
DecimalFormat decimalFormat = new DecimalFormat("#.#");
curRate = Float.valueOf(decimalFormat.format((curRate * count + rating)/ ++count));
float userRatePoint = curRate/**20*/;
setRatingBar.setRating(userRatePoint);
countText = (TextView) findViewById(R.id.countText);
countText.setText(userRatePoint + " Ratings");
} catch (Exception e) {
e.printStackTrace();
}
然后试试这个小明星评级栏:
<RatingBar
android:id="@+id/setRating"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="3dp"
android:isIndicator="true"
android:numStars="5"
android:stepSize="0.1" />
//if you want to style please use "foodRatingBar"
//for custom star image use "ratingstar"
style.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="foodRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:progressDrawable">@drawable/ratingstar</item>
<item name="android:minHeight">22dip</item>
<item name="android:maxHeight">22dip</item>
</style>
值v11/styes.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="foodRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:progressDrawable">@drawable/ratingstar</item>
<item name="android:minHeight">22dip</item>
<item name="android:maxHeight">22dip</item>
</style>
值v14/styes.xml
<resources>
<style name="foodRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:progressDrawable">@drawable/ratingstar</item>
<item name="android:minHeight">22dip</item>
<item name="android:maxHeight">22dip</item>
</style>
Base application theme for API 14+. This theme completely replaces
AppBaseTheme from BOTH res/values/styles.xml and
res/values-v11/styles.xml on API 14+ devices.
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- API 14 theme customizations can go here. -->
</style>
</resources>
ratingstar.xml --这是定义自定义进度映像的地方。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background"
android:drawable="@drawable/ratingstar_default" />
<item android:id="@android:id/secondaryProgress"
android:drawable="@drawable/ratingstar_default" />
<item android:id="@android:id/progress"
android:drawable="@drawable/ratingstar_selected" />
</layer-list>
才高八斗的钢笔 · pyqt qlabel 自动换行-掘金 1 年前 |