Событие движения только внутри вида кнопки, и не может быть нажато более одного раза - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть два вопроса прямо сейчас:

1) Использование приведенного ниже кода прекрасно работает, чтобы показать, где происходит сенсорное событие от пользователя на экране, однако всякий раз, когда нажимается только кнопка «Авто», этоотправляет событие движения внутри вида кнопки с размерами (X: 300, Y: 300), что технически правильно!Однако я хочу, чтобы он отправлял событие движения за пределы размеров вида кнопки.

2) Каждый раз, когда нажимается кнопка «Авто», она появляется только для быстрой отправки последовательности событий, которая выглядит как дважды, а затемНа кнопку невозможно нажать снова, если приложение не закрыто и не перезапущено.

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) { //On creation of the activity this code runs
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main);

        editText.isFocusable = false
        editText.isFocusableInTouchMode = false

        editText2.isFocusable = false
        editText2.isFocusableInTouchMode = false
    }


    private var isTouch = false

    @SuppressLint("SetTextI18n")
    override fun onTouchEvent(event: MotionEvent): Boolean {

        val X = event.x.toInt()
        val Y = event.y.toInt()

        val eventaction = event.action


        editText.setText("X: $X")
        editText2.setText("Y: $Y")
        return true
    }


fun button (view: View) {
    Toast.makeText(this, "AutoClicked", Toast.LENGTH_SHORT).show()
}


fun auto (view: View) {

    // Obtain MotionEvent object
    val downTime = SystemClock.uptimeMillis()
    val eventTime = SystemClock.uptimeMillis() + 100
    val x = 300.0f
    val y = 300.0f
// List of meta states found here:     developer.android.com/reference/android/view/KeyEvent.html#getMetaState()
    val metaState = 0
    val motionEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, x, y, metaState)
    val motionEvent2 = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, x, y, metaState)


// Dispatch touch event to view
    view.dispatchTouchEvent(motionEvent)
    view.dispatchTouchEvent(motionEvent2)
}

}

Я разместил код выше и картинку с кратким описанием того, что происходит на рисунке, связанном ниже.

Результаты отправленного события касания

Я видел идеи о том, как создать макет, на который ссылается это событие движения, но мне кажется, что для этой реализации мне не имеет смыслакода, который у меня сейчас есть.

...