Intereting Posts
Android – отключить HDMI Есть ли какая-либо услуга push-уведомлений на Android, например Apple Push Notification Service? Хранение RSA Private Key Android ZXing на Android PDF417 Очень простой код, но получил ошибку «Активность была уничтожена» при использовании фрагмента Портирование Trickle на Android SQLiteDatabase: Вставить только в том случае, если значение не существует (не через команду raw SQL) Android Material Design: Не удалось найти стиль «toolbarStyle» в текущей теме Создание программы TableLayout программно Как удалить панель заголовка из действия, расширяющего ActionBarActivity или AppcompatActivity с помощью темы диалога Есть ли способ иметь общий раздел с buildConfigField и resValue в градиенте? Пример использования андроидов lrucache Java.lang.Object не может быть разрешен в Eclipse Как обрабатывать сообщения обработчика, когда действие / фрагмент приостановлено Почему браузер не будет охватывать этот абзац по всей ширине браузера?

Пользовательские графические артефакты

Я RatingBar пользовательский RatingBar в приложении в своих ListView . Пользовательский стиль ratingbar_red.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/star_off" /> <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/star_on" /> <item android:id="@android:id/progress" android:drawable="@drawable/star_on" /> </layer-list> 

Вот часть раскладки ListItem:

 <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingLeft="15dp" > <RatingBar android:id="@+id/li_company_rating" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:layout_marginBottom="1dp" android:isIndicator="true" android:numStars="5" android:progressDrawable="@drawable/ratingbar_red" android:stepSize="1" /> <Button android:id="@+id/li_company_callbtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="0dp" android:layout_marginLeft="40dp" android:contentDescription="@string/ContentDescription" android:drawableLeft="@drawable/phone_icon" android:drawablePadding="5dp" android:onClick="callbtn_Click" android:text="@string/CallButton" android:focusable="false" android:focusableInTouchMode="false" > </Button> </LinearLayout> 1 <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingLeft="15dp" > <RatingBar android:id="@+id/li_company_rating" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:layout_marginBottom="1dp" android:isIndicator="true" android:numStars="5" android:progressDrawable="@drawable/ratingbar_red" android:stepSize="1" /> <Button android:id="@+id/li_company_callbtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="0dp" android:layout_marginLeft="40dp" android:contentDescription="@string/ContentDescription" android:drawableLeft="@drawable/phone_icon" android:drawablePadding="5dp" android:onClick="callbtn_Click" android:text="@string/CallButton" android:focusable="false" android:focusableInTouchMode="false" > </Button> </LinearLayout> 

Он работает, но когда рейтинг установлен, я получаю некоторые странные артефакты изображения; На моем видении появляются две вертикальные линии ниже розовых звезд:

Введите описание изображения здесь

Вот star_on.png

ссылка

Star_off.png выглядит нормально, и если рейтинг == 0, строки не отображаются.

Я начинаю андроид и не понимаю, в чем проблема.

Solutions Collecting From Web of "Пользовательские графические артефакты"

Попробуйте дать высоту RatingBar в XML-макете, например:

 android:layout_height="30dp" 

30dp или что вам подходит.

Проверьте, почему это происходит?

У меня была эта проблема, похоже, что нижний край пользовательского изображения звезды растягивается. Вам не нужно устанавливать layout_height метки метки рейтинга. Вы можете установить минимальную / максимальную высоту в баре оценки (так же, как высота изображения).

Пример из моих стилей xml.

 <style name="GoldRatingBar" parent="@android:style/Widget.RatingBar"> <item name="android:minHeight">@dimen/rating_bar_height</item> <item name="android:maxHeight">@dimen/rating_bar_height</item> </style> 

Dimens.xml

 <dimen name="rating_bar_height">11dp</dimen> 

Значение должно соответствовать значению используемого метода. 11 пикселей, поэтому рейтинг_bar_height был установлен в 11dp.

Каждое тело предлагает что-то, но ни одно тело не пытается объяснить, почему это происходит. Я попытаюсь объяснить это сейчас. Конечно, это произойдет только тогда, когда вы пытаетесь настроить изображения баров рейтинга.

Представьте, что у нас есть пользовательское изображение размером 72×72 пикселя, и это наш ресурс для XXXHDPI – (4x).

  1. Одно и то же изображение должно иметь копию внутри XXHDPI, XHDPI, HDPI, MDPI и LDPI. На данный момент я пропущу последний каталог ресурсов.
  2. Внутри разных каталогов это изображение должно быть следующим:
    • Для изображения копии XXHDPI должно быть 54×54 (это 3 раза)
    • Для XHDPI размер копии изображения должен быть 36×36 (это 2x)
    • Для изображения изображения формата HDPI должно быть 27×27 (это 1,5x)
    • Для изображения копии MDPI должно быть 18×18 (это 1x)
  3. Итак, теперь в этом случае, если ваша рейтинговая панель имеет высоту, превышающую 18 dp, например 30 dp, вы увидите это плохое изображение артефактов ниже каждого изображения звезды, ПОТОМУ ЧТО, очевидно, RatingBar пытается что-то заполнить всю его высоту (ваше изображение 18 dp, но высота бара составляет 30dp), поэтому остаток 12dp будет заполнен этими артефактами.

Вот почему, если вы установили высоту рейтинга, чтобы быть фиксированным размером, все МОЖЕТ быть ОК, но также НЕ МОЖЕТ БЫТЬ ОК. Все это зависит от вашего пользовательского размера изображения.

Я думаю, что есть одно решение, которое будет работать во всех возможных сценариях, и это:

  1. Создайте объект изображения для всех экранов устройств, которые ваше приложение будет поддерживать XXXHDPI, XXHDPI или что угодно.
  2. Убедитесь, что если ваш (MDPI, который является 1x) образ имеет, например, высоту 20 пикселей, ваша высота RatingBar не будет больше 20 дп, и все будет в порядке.

ПРИМЕЧАНИЕ. В этом разговоре мы говорим о dp (пикселей плотности) не в px, потому что, если мы предоставим все эти ресурсы изображения в каждой отдельной папке res, у нас будет возможность работать с dp не с px. Надеюсь, последнее предложение ясное и имеет смысл.

EDIT: Другой возможный способ – оставить небольшое заполнение (пустое пространство), возможно, 1px или 2px внизу вашего пользовательского изображения. В этом случае в представлении RatingBar НЕ будут отображаться эти пиксели артефактов, потому что они будут взяты из дополняющей части вашего пользовательского изображения, что на самом деле является просто пустыми (прозрачными) пикселями. Я лично думаю, что это не лучший способ, потому что дополнение к изображениям создаст некоторое пространство (дополнение) между RatingBar и остальными видами внутри макета. В этом случае у вас не будет абсолютно полного контроля над пространством Views, потому что небольшая часть была жестко закодирована внутри пользовательского изображения (эти 2 px padding).

Еще одно простое решение состоит в том, чтобы оставить ряд пустых пикселей в изображении звезды с помощью редактора изображений, такого как Photoshop. Тогда повторяющийся или растянутый ряд пикселей в баре оценки будет пустым. Этот подход решил мою проблему.

Я решил эту проблему по-другому. Я беру свои собственные звездные png, а в редакторе изображений добавляет прозрачную строку к нижней части изображения. Проблема с вертикальными линиями исчезла на всех экранах!

Это проблема дизайна Icon. Проблема здесь в дополнении вокруг значка. Если вы создаете пользовательский значок звездочки, убедитесь, что вы оставили пробел между звездой и границей страницы, на которой она находится.

Если вы не знаете, как это сделать, попробуйте Android Asset Studio . Вы можете увидеть что-то наподобие «Прокладка вокруг оптической иконки», чтобы она не опускалась до нуля.

Всего 2 пикселя в виде изображения в фотошопе. Padding in xml не работает, просто добавьте звездное изображение в Photoshop. Это очень хорошо работает.

Я исправил ту же проблему, уменьшив «layout_height», так как высота моего изображения была меньше, чем высота, которую я имел в layout_height.

Тот же вопрос. В моем случае поместите пользовательские звездообразные изображения в папку / Drawable и установите "android:layout_height="30dip"

Работа хорошо !!