【Android】カラーを設定する

1.XMLリソースファイル

res/values/colors.xml でカラー リソースを定義します。

<color name="my_color">#FFC107</color>

レイアウト ファイルで使用します。

android:background="@color/my_color"

コード内での使用:

val color: Int = ContextCompat.getColor(this, R.color.my_color)

2. コードに直接設定する

Color クラスの静的メソッドを使用します。

import android.graphics.Color

val redColor = Color.RED
val customColor = Color.rgb(255, 165, 0) // 使用RGB值
val argbColor = Color.argb(255, 255, 165, 0) // 使用ARGB值

3.使用 ColorDrawable

コードで ColorDrawable を作成し、以下を使用します。

import android.graphics.drawable.ColorDrawable

val drawable = ColorDrawable(Color.parseColor("#FFC107"))
binding.textView.setTextColor(drawable.color)

4. カラーステートリストリソース(カラーステートリスト)

1).カラーステートリストファイルの作成

XML ファイル (my_color_state_list.xml など) を res/color ディレクトリに作成して、色の状態リストを定義します。

注: 最初に color ディレクトリを作成します。<selector> XML ファイルは、「values」ディレクトリではなく、「animator」、「drawable」、または「color」ディレクトリに配置する必要があります。

2). カラーステートリストファイルでカラーステート項目を定義します。

XML ファイルでは、<selector> 要素をルート要素として使用し、さまざまな状態のカラー項目を定義します。各色の項目は <item> 要素を使用して、対応する状態と色の値を指定します。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/colorPressed" />
    <item android:state_selected="true" android:color="@color/colorSelected" />
    <item android:state_enabled="false" android:color="@color/colorDisabled" />
    <item android:color="@color/colorDefault" />
</selector>

3). カラーリソースを定義する

カラー状態リスト ファイルで参照できるように、res/values/colors.xml ファイルで個々のカラー値 (colorPressed、colorSelected など) を定義します。

押されたときの色 (`colorPressed`)、選択されたときの色 (`colorSelected`)、無効になったときの色 (`colorDisabled`)、およびデフォルトの色 (`colorDefault`) の 4 つの色を定義します。

<resources>
    <color name="colorPressed">#FF0000</color>
    <color name="colorSelected">#00FF00</color>
    <color name="colorDisabled">#808080</color>
    <color name="colorDefault">#000000</color>
</resources>

4).レイアウトファイルにカラーステートリストを適用

レイアウト ファイルで使用します。

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello, World!"
    android:textColor="@color/my_color_state_list" />

コード内での使用:

val colorStateList = ContextCompat.getColorStateList(this, R.color.my_color_state_list) binding.textView.setTextColor(colorStateList) 

 

5. 属性の参照

テーマで定義された色のプロパティを使用します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme.GATestDemol" parent="Theme.AppCompat.Light.NoActionBar" >
        <!-- 主题颜色 -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <!-- 其他主题属性 -->
    </style>
</resources>

カラー リソース ファイル (通常は `res/values/colors.xml`) で colorPrimary を定義します。

<resources>
    <color name="colorPrimary">#3F51B5</color>
    <!-- 其他颜色 -->
</resources>

レイアウト ファイルで使用します。

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello, World!"
    android:textColor="?attr/colorPrimary" />

コード内での使用:

import android.util.TypedValue

var color1 = androidx.appcompat.R.attr.colorPrimary
var color2 = com.google.android.material.R.attr.colorPrimary
var color3 = androidx.constraintlayout.widget.R.attr.colorPrimary

val typedValue = TypedValue()
this.theme.resolveAttribute(color2, typedValue, true)
val colorPrimary = typedValue.data
binding.textView.setTextColor(colorPrimary)

6.リソース互換性

ResourcesCompat を使用して色を取得します。

import androidx.core.content.res.ResourcesCompat

val color = ResourcesCompat.getColor(resources, R.color.my_color, null)
binding.textView.setTextColor(color)

7.バリューアニメーター

カラーをアニメーション化する:

import android.animation.ValueAnimator  
import android.view.animation.AccelerateDecelerateInterpolator   

val colorAnimator = ValueAnimator.ofArgb(Color.RED, Color.BLUE)
colorAnimator.duration = 5000 // 设置动画持续时间(单位:毫秒)
colorAnimator.interpolator = AccelerateDecelerateInterpolator() // 设置插值器
colorAnimator.repeatMode = ValueAnimator.REVERSE // 设置重复模式
colorAnimator.addUpdateListener { animator ->
    val animatedColor = animator.animatedValue as Int
    // 使用 animatedColor
    binding.textView14.setTextColor(animatedColor)
}
colorAnimator.start()

8. ColorMatrix と ColorFilter を使用する

ColorMatrix と ColorFilter は、グラフィック処理と色調整に使用されるクラスです。これらは、ビットマップの変更、キャンバスへの描画、イメージ ビューへの適用などに使用できます。

1).ColorMatrixオブジェクトの作成

ColorMatrix クラスのコンストラクターまたは静的メソッドを使用して、ColorMatrix オブジェクトを作成します。

val colorMatrix = ColorMatrix()

2).カラーマトリックスの変更

ColorMatrix オブジェクトのメソッドを呼び出すことにより、マトリックスの要素を変更して、さまざまな画像処理効果を実現できます。

明るさを調整します:

val brightness = 1.2f // 亮度增加 20%
val matrix = floatArrayOf(
    brightness, 0f, 0f, 0f, 0f,
    0f, brightness, 0f, 0f, 0f,
    0f, 0f, brightness, 0f, 0f,
    0f, 0f, 0f, 1f, 0f
)
colorMatrix.set(matrix)

コントラストを調整します:

val contrast = 1.5f // 对比度增加 50%
val matrix = floatArrayOf(
    contrast, 0f, 0f, 0f, 0f,
    0f, contrast, 0f, 0f, 0f,
    0f, 0f, contrast, 0f, 0f,
    0f, 0f, 0f, 1f, 0f
)
colorMatrix.set(matrix)

色変換:

val matrix = floatArrayOf(
    1f, 0f, 0f, 0f, 0f, // 红色通道
    0f, 0f, 0f, 0f, 0f, // 绿色通道
    0f, 0f, 0f, 0f, 0f, // 蓝色通道
    0f, 0f, 0f, 1f, 0f  // 透明度通道
)
colorMatrix.set(matrix)

3).カラーフィルターの作成

ColorMatrixColorFilter クラスを使用して ColorFilter オブジェクトを作成し、それに ColorMatrix オブジェクトを渡します。

val colorFilter = ColorMatrixColorFilter(colorMatrix)

4).カラーフィルターを適用する

ColorFilter をターゲット ビューまたは描画キャンバスに適用します。

ColorFilter を ImageView に適用します。

val colorMatrix = ColorMatrix().apply { setSaturation(0.5f) }
val filter = ColorMatrixColorFilter(colorMatrix)
binding.imageView.colorFilter = filter
val colorMatrix = ColorMatrix()
val contrast = 1.5f // 对比度增加 50%
val matrix = floatArrayOf(
    contrast, 0f, 0f, 0f, 0f,
    0f, contrast, 0f, 0f, 0f,
    0f, 0f, contrast, 0f, 0f,
    0f, 0f, 0f, 1f, 0f
)
colorMatrix.set(matrix)
val colorFilter = ColorMatrixColorFilter(colorMatrix)
binding.imageView.colorFilter = colorFilter

描画キャンバスにカラーフィルターを適用します。

canvas?.drawBitmap(bitmap, 0f, 0f, Paint().apply {
    colorFilter = colorFilter
})

おすすめ

転載: blog.csdn.net/u012881779/article/details/134426051