Подсветка раскладки после задержки? - PullRequest
0 голосов
/ 13 ноября 2009

Я создал свой составной виджет, примерно такой:

<LinearLayout>
  <TextView />
  <Button />
</LinearLayout>

Я помещаю 15 из них в ScrollView. Я хочу, чтобы он вел себя подобно ListView (я не могу использовать ListView напрямую для этой задачи).

Мне нужно, чтобы каждый виджет выделялся при нажатии. Я заставил это работать, но он слишком чувствителен - как только мой палец коснется макета, он подсвечивается - я бы хотел, чтобы была задержка перед выделением, чтобы различить реальное нажатие и просто жест прокрутки. 1006 *

Например, в ListView, когда вы перетаскиваете палец для прокрутки, элементы строки не подсвечиваются, пока вы не оставите палец на строке на секунду.

Вот как я установил фон каждого из моих составных элементов:

private void setBg() {
  ColorDrawable blr = new ColorDrawable(0xFFFFFFFF);
  Drawable pressed = getContext().getResources().getDrawable(android.R.drawable.list_selector_background);

  StateListDrawable bg = new StateListDrawable();
  bg.addState(View.PRESSED_ENABLED_STATE_SET, pressed);
  bg.addState(View.FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET, pressed);
  bg.addState(View.PRESSED_ENABLED_FOCUSED_STATE_SET, pressed);
  bg.addState(View.ENABLED_WINDOW_FOCUSED_STATE_SET, pressed);
  bg.addState(View.ENABLED_STATE_SET, blr);
  bg.addState(View.SELECTED_WINDOW_FOCUSED_STATE_SET, blr);

  setBackgroundDrawable(bg);
}

, поэтому я не уверен, что я просто неправильно установил одно из указанных выше состояний рисования фона - или ListView выполняет какую-то обработку касания внутри для этой задержки касания?

Спасибо

Ответы [ 2 ]

0 голосов
/ 09 декабря 2009

Презентация Ромена Гая из Google IO 2009 помогла мне в похожей ситуации:

Сделайте ваш Android-интерфейс быстрым и эффективным (около 90 секунд)

Упомянутый трюк ViewHolder может значительно повысить производительность.

Кроме того, отображение временного объекта Drawable во время загрузки изображения из кэша позволяет быстро прокручиваться, даже если изображение еще не загружено, а затем можно использовать анимацию для (например) постепенного исчезновения изображения при возврате из кэша.

Похоже, именно такой подход они используют в приложениях, таких как Android Market.

0 голосов
/ 28 ноября 2009

Попробуйте использовать анимацию или переход, запустить анимацию или запуск перехода при касании, и остановить или сбросить, когда касание вверх или отмена. Поместите задержку на первый кадр / элемент в списке.

http://developer.android.com/guide/topics/graphics/2d-graphics.html#frame-animation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...