我尝试过的所有混合模式几乎都无法正常工作。以下是其中一些。请记住,dst =绿色,src =红色。
DST,DST_IN(对于DST,此结果是正确的,但对于DST_IN,则不是)
我的观点:
import android.content.Context
import android.graphics.*
import android.util.AttributeSet
import android.view.View
class MyView(context: Context?, attrs: AttributeSet?) : View(context, attrs) {
val blendPaint = Paint()
val simplePaint = Paint()
init {
blendPaint.xfermode = PorterDuffXfermode(PorterDuff.Mode.DST_IN)
blendPaint.color = Color.argb(255,255,0,0)
simplePaint.color = Color.argb(255,0,255,0)
}
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
canvas!!.drawRect(Rect(0, 0, 400, 400), simplePaint)
canvas.drawRect(Rect(200, 200, 600, 600), blendPaint)
}
private fun mutableBitmap(resId: Int): Bitmap {
val immutable = BitmapFactory.decodeResource(this.resources, resId)
return immutable.copy(Bitmap.Config.ARGB_8888, true)
}
}
我的布局:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<com.example.scrp01.com.example.scrp01.MyView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
这是一个新创建的项目,完全没有对AndroidManifest进行任何更改,并在API 26 Android 8.0,CPU x86上运行。 Android Studio版本3.3.2
您可以在这里看到合适的结果:https://developer.android.com/reference/android/graphics/BlendMode.html#SRC