Я пытаюсь переместить пользовательский вид (маленький кружок) по всему макету приложения, используя пропорциональные значения x и y.Скажем, например, что я хочу переместить окружность точно в середину экрана, поэтому я отправлю (0.5f, 0.5f), а затем умножу каждое значение на мои текущие ширину и высоту экрана соответственно.Но по какой-то причине круг заканчивается где-то еще, например (0,5, 0,5) и заканчивается в правом нижнем углу экрана, точно так же, как если бы я использовал неправильные и большие значения разрешения, а я нет, так как я дажежестко запрограммировав разрешение моего устройства, чтобы убедиться, что это не проблема.
Вот мой текущий вид реализации:
class CirclePointer(context: Context, attrs: AttributeSet) :View(context, attrs){
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
canvas.apply {
this!!.drawCircle(x, y, 5f, mCirclePointerPaint)
}
}
private val mCirclePointerPaint = Paint().apply {
}
fun move(newX: Float, newY: Float){
x = newX * 1280// hardcoded width
y = newY * 720// hardcoded height
invalidate()
requestLayout()
}// end of move
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
super.onSizeChanged(w, h, oldw, oldh)
}
}
И моя активность xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/heading"
android:orientation="vertical">
<my.package.annotation_views.CirclePointer
android:id="@+id/circlePointer"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
IЯ только что понял, как реализовать свой собственный вид, так что я почти уверен, что что-то упустил.Поэтому любая помощь будет принята.
То, что я пробовал
- Установка ширины и высоты моего CirclePointer для match_parent вместо wrap_content
Наблюдения
Я использую Android Studio 3.2 и macOS Mojave
Заранее спасибо.