RatingBar图片拉伸

    具体的使用我就不介绍了,CSDN有很多博客都介绍到了。在使用自定义的图片时,需要用到一个style文件,如下:

<resources>

    <style name="myRatingBar" parent="@android:style/Widget.RatingBar">

       <item name="android:progressDrawable">@drawable/my_rating_bar</item>

       <item name="android:minHeight">16dip</item>

       <item name="android:maxHeight">16dip</item>

    </style>

</resources>

         如果需要适配多分辨率多屏幕密度的情况下,android:minHeight 和 android:maxHeight这两个属性不管设置多大都不合适。一种屏幕合适了,在另外一个屏幕上,就可能显示不完整或者图片被拉伸。

        解决的方法如下:

step 1:将这两张图片分别拷贝到以下文件夹;

            

setp 2:修改android:minHeight 和 android:maxHeight 这两个属性的值为图片的实际高度,用px为单位。假设图片的尺寸为 36x30,修改后如下:

<resources>

    <style name="roomRatingBar" parent="@android:style/Widget.RatingBar">

       <item name="android:progressDrawable">@drawable/room_rating_bar</item>

       <item name="android:minHeight">30px</item>

       <item name="android:maxHeight">30px</item>

    </style>

</resources>

        修改完毕,在不同分辨率的手机下,都能正常显示。

注意:有的同学在替换图片后会发现,星星之间的挨的太近,没有间距。这个时候可以在切图的时候,在星星图片的左右两边都加上几个像素的透明边距。









-------------------------------------

1.xml布局解决。
2.代码解决。
3.将RatingBar换成ImageView,一劳永逸。
第一种方式:

能解决正规分辨率下的适配,但是Android机型真是不敢恭维,太NM恶心了。
做适配:
1.分别在drawable目录下放置对应的图片
2.写个样式

<style name="myRatingBar" parent="@android:style/Widget.RatingBar">
        <item name="android:progressDrawable">@drawable/ratingbar_drawable</item>
        <item name="android:minHeight">@dimen/rating_bar_my_height</item>
        <item name="android:maxHeight">@dimen/rating_bar_my_height</item>
    </style>

不同dpi目录下 dimen设置的height应该对应相应的图片px

这是我的RatingBar的drawable

<?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/star2_gray">
    </item>
    <item
        android:id="@android:id/secondaryProgress"
        android:drawable="@drawable/star2_gray">
    </item>
    <item
        android:id="@android:id/progress"
        android:drawable="@drawable/star2_pink">
    </item>

</layer-list>
不同dpi目录下的图片
xhdpi目录下的star2_pink
xxhdpi目录下的star2_pink
不同dpi目录下的dimens
xhdpi目录下设置的RatingBar的height
xxhdpi目录下设置的RatingBar的height
第二种方式:

直接获取对应图片的高度,然后设置图片的高度。

try {
Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_score_press);     
    scroeHeight = bmp.getHeight();
} catch (Exception e) {
    e.printStackTrace();
}

在需要的地方设置LayoutParams  记得图片只需要初始化一次就可以了。
if(scroeHeight!=0){
    LinearLayout.LayoutParams llp = (LayoutParams) holder.rb_score.getLayoutParams();
        llp.width = -2;// 包裹内容
        llp.height = scroeHeight;
        holder.rb_score.setLayoutParams(llp);
}

<RatingBar
    android:id="@+id/ratingbar_star_recycler_item_video_fragment"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:progressDrawable="@drawable/a_custom_ratingbar"
    android:layout_marginLeft="4dp"
    android:isIndicator="true"
    android:rating="1" />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值