Как создать панель кнопок с скользящим управлением в Android? - PullRequest
1 голос
/ 13 октября 2010

Приложение Footprints and Clock на телефонах HTC Sense использует ползунок на нижней панели кнопок (см. Пример фильма: https://docs.google.com/leaf?id=0B9hmEy_z2CRzOTJmYTVlNDktYjkwMS00YTM5LTk3ODQtYmIzODU4Yzk1YjA0&hl=en&authkey=CMWwwegG).

Из средства просмотра иерархии я вижу, что для этого они используют собственный элемент управления. Я ищу способ добиться того же эффекта. Мне нужна панель кнопок в нижней части моего приложения с подвижным селектором, который я могу перетаскивать слева направо и назад, выбирая тем самым различные вкладки.

Кто-нибудь может дать несколько советов, как мне этого добиться? Какие элементы управления макетом я могу использовать для этой цели? Я знаю, как создавать вкладки и панель кнопок, но я немного озадачен скользящим селектором.

Спасибо и всего наилучшего, Ivo

Ответы [ 2 ]

1 голос
/ 13 октября 2010

Чтобы создать представление, у вас есть два основных варианта.

Один из них - определить его в XML, в файле макета, который будет использовать ваша активность.

<LinearLayout ... > <!-- or any other layout, see layout documentation in the SDK -->
  <ImageView ...    <!-- or another view as fits your needs -->
    android:id="@+id/myview"
    android:src="@drawable/myimage" ... />
</LinearLayout>

Затем вы можете сослаться на него.ваше представление в вашем коде, после вы вызвали setContentView, с findViewById (R.id.myview).(конечно, если вы скажете, скажем, «@ + foo / bar» в файле XML, вы будете использовать R.foo.bar).

Другой способ - создать его динамически и прикрепитьв иерархию представлений.

ImageView v = new ImageView();
v.setImageResource(R.drawable.myimage);
... // initialize your view here
parent.addChild(v);

... Или так.

Чтобы получить события, у вас снова есть несколько вариантов.Одним из них является создание подкласса View (или ImageView в этом отношении) и реализация onTouchEvent.Вам нужно будет адаптировать приведенный выше код для создания экземпляра вашего нового класса вместо ImageView (это очевидно в коде Java, для XML вы должны написать имя тега и убедиться, что вы реализуете конструктор, который принимает (Context, AttributeSet)назвать его конструктор суперкласса).Или вы можете написать TouchDelegate и использовать setTouchDelegate в вашем ImageView, что, вероятно, проще в вашем случае.

Другой подход заключается в создании GestureDetector и сопоставлении касаний с вашим представлением с использованием метода hitTest.Для описываемой вами задачи это излишне, но может пригодиться, когда ваше приложение станет более сложным.

0 голосов
/ 13 октября 2010

Я бы расширил класс TabWidget, чтобы сделать мой собственный рендеринг. У вас были бы преимущества горячей замены с другими системами вкладок и унифицированным интерфейсом, при этом вы все равно могли рисовать панель вкладок так, как вам хочется. Вы начали бы свою анимацию в setCurrentTab.

...