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
})