[안드로이드]색상 설정

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. 색상 상태 목록 리소스(Color State List)

1).색상 상태 목록 파일 생성

색상 상태 목록을 정의하려면 res/color 디렉터리에 XML 파일(예: my_color_state_list.xml)을 만듭니다.

참고: 먼저 색상 디렉터리를 직접 만드세요. <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`)의 네 가지 색상을 정의합니다.

<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.ValueAnimator

색상 애니메이션:

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 수정

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).ColorFilter 생성

ColorMatrixColorFilter 클래스를 사용하여 ColorFilter 객체를 만들고 ColorMatrix 객체에 전달합니다.

val colorFilter = ColorMatrixColorFilter(colorMatrix)

4).ColorFilter 적용

ColorFilter를 대상 뷰 또는 그리기 캔버스에 적용합니다.

ImageView에 ColorFilter를 적용합니다.

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

그리기 캔버스에 ColorFilter를 적용합니다.

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

추천

출처blog.csdn.net/u012881779/article/details/134426051