У меня есть две проблемы, с которыми я борюсь. Первый - это доступ к параметру конструктора imagePath
(код ниже), к которому я не могу получить доступ в блоке инициализатора: (Я начинающий Kotlin)
class CustomView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : View(context, attrs, defStyleAttr){
constructor(**imagePath:String**, context: Context) : this(context)
val paint = Paint()
val rectF = RectF()
val mPath = Path()
val drawable_bitmap: Drawable
var startX = 0f
var startY = 0f
var endX = 0f
var endY = 0f
val TAG = "CustomShapes"
init{
paint.color = Color.BLUE
paint.style = Paint.Style.STROKE
paint.flags = Paint.ANTI_ALIAS_FLAG
paint.strokeWidth = 10f
drawable_bitmap = loadBitmapDrawable(**imagePath**) //error here
}
private fun loadBitmapDrawable(imagePath: String): Drawable {
return resources.getDrawable(R.drawable.img,null)
}
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
if (((startY - endY)!=startY)|| (startX - endX)!=startX){
endY = endY.absoluteValue
endX = endX.absoluteValue
rectF.top = if (endY<startY)endY else startY
rectF.left = if (endX<startX) endX else startX
rectF.bottom = if (endY>startY)endY else startY
rectF.right = if (endX>startX) endX else startX
}
if (canvas!=null) {
drawable_bitmap.setBounds(canvas.clipBounds)
drawable_bitmap.draw(canvas)
}
// canvas?.drawRect(rectF,paint)
canvas?.drawOval(rectF,paint)
}
override fun onTouchEvent(event: MotionEvent?): Boolean {
if (event?.action == MotionEvent.ACTION_DOWN){
Log.d(TAG,"IN ACTION DOWN")
startX = event.x
startY = event.y
endX = startX
endY = startY
invalidate()
} else if (event?.action == MotionEvent.ACTION_MOVE){
Log.d(TAG,"ACTION MOVE")
endX = event.x
endY = event.y
invalidate()
}else if (event?.action == MotionEvent.ACTION_UP || event?.action == MotionEvent.ACTION_POINTER_UP ){
Log.d(TAG,"ACTION UP")
endX = event.x
endY = event.y
invalidate()
}
return true
}
}
И, во-вторых, мой код в настоящее время заполняет мой холст (скриншот прилагается), что также означает, что мое изображение растягивается.
Я бы хотел, чтобы мое изображение соответствовало inside
холсту без растягивания ИЛИ / И чтобы холст соответствовал моему размеру (без растяжения) поверх изображения, чтобы я мог нарисовать на нем несколько фигур.