Я пытаюсь программно вызвать пролистывание в представлении. Есть другие вопросы с ответами, но они не работают для меня. Я также видел комментариев , в которых говорилось, что программное перетаскивание было отключено по соображениям безопасности, это правда? Я хотел бы найти окончательный ответ на этот вопрос.
Я попробовал следующий метод, чтобы плакат показал работу через видео, поэтому он должен работать! Что-то мне нужно в моей AndroidManifest
? Я также попробовал scrollBy()
API, но он не прокручивает мой контент, а вместо этого перемещает контент за экран.
Более того, я зарегистрировал OnTouchListener
с моим видом и увидел, что приведенный ниже код копирует тот же формат запуска событий (ACTION_DOWN
, ACTION_MOVE
, ACTION_UP)
, что щелчок + перетаскивание и мышь Колесо сделать, хотя щелчок + перетаскивание и колесо мыши работает, в то время как программная прокрутка / пролистывание не работает.
final Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
final MotionEvent event = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_DOWN, 500, 700, 0);
dispatchTouchEvent(event);
event.recycle();
}
});
handler.postDelayed(new Runnable() {
@Override
public void run() {
final MotionEvent event = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_MOVE, 500, 700 ,0);
dispatchTouchEvent(event);
event.recycle();
}
}, 50);
handler.postDelayed(new Runnable() {
@Override
public void run() {
final MotionEvent event = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_MOVE, 500 ,700 + 400, 0);
dispatchTouchEvent(event);
event.recycle();
}
}, 100);
handler.postDelayed(new Runnable() {
@Override
public void run() {
final MotionEvent event = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_UP, 500, 700 + 400, 0);
dispatchTouchEvent(event);
event.recycle();
}
}, 1000);