Как установить непрозрачность фигуры?

#android #graphics

#Android #графика

Вопрос:

Я уже знаю, как установить непрозрачность фонового изображения, но мне нужно установить непрозрачность моего объекта shape.

В моем приложении для Android это выглядит следующим образом: введите описание изображения здесь

и я хочу сделать эту черную область немного прозрачной, как здесь, например, я могу видеть круги, хотя это «Добро пожаловать …» :

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

Вот мой код формы:

 <?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ id/shape_my"">
    <stroke android:width="4dp" android:color="#636161" />
    <padding android:left="20dp"
        android:top="20dp"
        android:right="20dp"
        android:bottom="20dp" />
    <corners android:radius="24dp" />
</shape>
  

Как я могу это сделать?

Комментарии:

1. Здесь мог бы помочь код объектов формы.

Ответ №1:

В общем случае вам просто нужно определить слегка прозрачный цвет при создании фигуры.

Этого можно добиться, установив альфа-канал colors.

#FF000000 вы получите сплошной черный цвет, тогда как #00000000 вы получите 100% прозрачный черный цвет (ну, очевидно, что он больше не черный).

Цветовая схема такая #AARRGGBB там A обозначает альфа-канал, R обозначает красный, G — зеленый и B — синий.

То же самое применимо, если вы задаете цвет в Java. Там это будет выглядеть только так 0xFF000000 .

Обновить

В вашем случае вам пришлось бы добавить solid узел. Как показано ниже.

 <?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ id/shape_my">
    <stroke android:width="4dp" android:color="#636161" />
    <padding android:left="20dp"
        android:top="20dp"
        android:right="20dp"
        android:bottom="20dp" />
    <corners android:radius="24dp" />
    <solid android:color="#88000000" />
</shape>
  

Цвет здесь наполовину прозрачный, черный.

Комментарии:

1. codeviewer.org/view/code:1974 — shape.xml . codeviewer.org/view/code:1975 — layout.xml . codeviewer.org/view/code:1976 — .java setOpacity не работает с формой. И я пытаюсь добавить android: background = «# 00000000» в shape.xml , но ничего не происходит.

2. Это странно… Не имеет значения, какое значение я установил для цвета, моя фигура полностью прозрачна = (

3. Мне кажется, что непрозрачность может быть установлена только для вида или изображения… Потому что, когда я пишу android: background= «#88000000» вместо android: background = «@drawable / shape» в моем LinearLayout, это работает.

4. Это работает и с фигурами. Вы пробовали то, что я опубликовал выше?

5. Да, но это не работает. Вы пробовали весь этот код на своем компьютере?

Ответ №2:

Вместо преобразования альфа-значения в шестнадцатеричное, мы также можем использовать список состояний цвета для определения альфа-значения.

res/values/colors.xml

 <color name="colorPrimary">#0000FF</color>
  

res/color/color_primary_20.xml

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:alpha="0.2" android:color="?attr/colorPrimary" />
</selector>
  

res/drawable/a_shape.xml

 <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <stroke
        android:width="2dp"
        android:color="@color/color_primary_20" />
</shape>
  

Комментарии:

1. Классно, именно то, что я искал!

2. Я получаю AAPT: error: resource attr/accent (aka com.example.project:attr/colorPrimary) not found.

Ответ №3:

используйте этот код ниже как progress.xml:

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dip" />
            <gradient
                    android:startColor="#ff9d9e9d"
                    android:centerColor="#ff5a5d5a"
                    android:centerY="0.75"
                    android:endColor="#ff747674"
                    android:angle="270"
            />
        </shape>
    </item>

    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <solid android:color="#00000000" />
            </shape>
        </clip>
    </item>

    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <solid android:color="#00000000" />
            </shape>
        </clip>
    </item>

</layer-list>
  

где:

  • «прогресс» — это текущий прогресс перед большим пальцем, а «secondaryProgress» — это прогресс после большого пальца.
  • color= «#00000000» — это идеальная прозрачность
  • ПРИМЕЧАНИЕ: приведенный выше файл взят из стандартного Android res и предназначен для версии 2.3.7, он доступен в исходниках Android по адресу: frameworks/base/core/res/res/drawable/progress_horizontal.xml . Для более новых версий вы должны найти файл для рисования по умолчанию для панели поиска, соответствующий вашей версии Android.

после этого используйте ее в макете, содержащем xml:

 <SeekBar
    android:id="@ id/myseekbar"
    ...
    android:progressDrawable="@drawable/progress"
    />
  

вы также можете настроить большой палец, используя пользовательский значок seek_thumb.png:

 android:thumb="@drawable/seek_thumb"
  

Ответ №4:

Используйте это, я написал это в свое приложение,

 <?xml version="1.0" encoding="utf-8"?>
<!--  res/drawable/rounded_edittext.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" android:padding="10dp">
    <solid android:color="#882C383E"/>
    <corners
        android:bottomRightRadius="5dp"
        android:bottomLeftRadius="5dp"
        android:topLeftRadius="5dp"
        android:topRightRadius="5dp"/>
</shape>
  

Ответ №5:

Чтобы установить альфа-код с цветом атрибута темы, например, как ?attr/colorSurface :

 <shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:tint="?attr/colorSurface"> <!-- specify your tint color -->
    <solid android:color="#AA000000" /> <!-- instead of `AA` specify your alpha level -->
</shape>
  

Полное изменение альфа-версии

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

Ответ №6:

Если кто-то пытается использовать Cardview, он может попробовать этот код.

 <androidx.cardview.widget.CardView
            android:id="@ id/cvView"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:layout_marginBottom="16dp"
            android:shape="ring"
            android:visibility="visible"
            app:cardCornerRadius="75dp"
            app:cardBackgroundColor="@android:color/transparent"
            app:layout_constraintBottom_toTopOf="@id/fab"
            app:layout_constraintEnd_toEndOf="@ id/fab"
            app:layout_constraintStart_toStartOf="@ id/fab">

            <ImageView
                android:id="@ id/ivImage"
                android:orientation="horizontal"
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:layout_gravity="center"
                android:padding="@dimen/_10sdp"
                android:background="@drawable/custom_circle_shape"
                android:src="@drawable/ic_fab_rpt"/>

</androidx.cardview.widget.CardView>
  

custom_circle_shape.xml

 <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#4D4953D2" />
    <corners android:radius="40dp" />
    <stroke
        android:width="@dimen/_2sdp"
        android:color="#7882FA" />
</shape>