Загрузка изображения на холст + Доступ к параметру конструктора - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть две проблемы, с которыми я борюсь. Первый - это доступ к параметру конструктора 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 холсту без растягивания ИЛИ / И чтобы холст соответствовал моему размеру (без растяжения) поверх изображения, чтобы я мог нарисовать на нем несколько фигур.

Screenshot

Actual image

...