Зазор появляется при перетаскивании View - Android

У меня есть LinearLayout с левым компонентом и правым компонентом. Между ними нет промежутка. Статически вид выглядит нормально. Однако, когда я перетаскиваю через View.OnTouchListener, из ниоткуда появляется узкий вертикальный зазор, что крайне раздражает. Кто-нибудь знает, как я могу это исправить?

MainActivity.kt

class MainActivity : AppCompatActivity(), View.OnTouchListener {
    private lateinit var knobView: LinearLayout
    private lateinit var knobLeftView: View
    private lateinit var knobRightView: View
    private var currentX = 0F

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        knobLeftView = findViewById(R.id.knob_left)
        knobRightView = findViewById(R.id.knob_right)
        knobView = findViewById(R.id.knob)
        knobView.setOnTouchListener(this)
    }

    override fun onTouch(view: View, event: MotionEvent): Boolean {
        val destX = event.rawX
        when (event.action) {
            MotionEvent.ACTION_DOWN -> {
                currentX = destX
            }
            MotionEvent.ACTION_MOVE -> {
                val deltaX = destX - currentX
                knobView.animate()
                    .xBy(deltaX)
                    .duration = 0
                currentX = destX
            }
        }
        return true
    }
}

Activity_main.xml

<?xml version = "1.0" encoding = "utf-8"?>
<FrameLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:clipChildren = "false">
    <LinearLayout
        android:id = "@+id/knob"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_gravity = "center"
        android:orientation = "horizontal">
        <View
            android:id = "@+id/knob_left"
            android:layout_width = "@dimen/knob_radius"
            android:layout_height = "@dimen/knob_size"
            android:background = "@drawable/background_left" />
        <View
            android:id = "@+id/knob_right"
            android:layout_width = "@dimen/knob_radius"
            android:layout_height = "@dimen/knob_size"
            android:background = "@drawable/background_right" />
    </LinearLayout>
</FrameLayout>

Похоже на проблему с фоном. Попробуйте назначить ему значок или темный цвет, например черный.

ADM 24.04.2023 14:54

Мне нужно использовать 2 полукруга в реальном приложении. Кроме того, использование черного цвета не помогло.

kc_dev 24.04.2023 16:16
1
2
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что это, вероятно, может быть проблемой рендеринга. Но это можно решить, изменив начальное поле вместо позиции x:

override fun onTouch(view: View, event: MotionEvent): Boolean {
    val destX = event.rawX

    when (event.action) {
        MotionEvent.ACTION_DOWN -> {
            currentX = destX
        }

        MotionEvent.ACTION_MOVE -> {
            val deltaX = destX - currentX
//                knobView.animate()
//                    .xBy(deltaX)
//                    .duration = 0

            val params = knobView.layoutParams as FrameLayout.LayoutParams
            params.leftMargin = (params.leftMargin + deltaX).toInt()
            knobView.layoutParams = params

            currentX = destX
        }
    }
    return true
}

Поскольку продолжительность анимации установлена ​​на 0, это не сильно повлияет на отсутствие использования анимации.

Ух ты, потрясающе! Большое спасибо! Мне бы и в миллион лет не пришло в голову это сделать!

kc_dev 06.05.2023 05:50

Другие вопросы по теме