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