Я пытаюсь найти способ реализовать эффект пульсации клавиш KeyboardView при нажатии. Звучит достаточно просто, но я пробовал все способы добавления пульсации, которые работают с другими типами представлений (listview, button и т. Д.) Без каких-либо успехов.Как реализовать эффект пульсации в Android KeyboardView?
Моя цель состоит в том, чтобы создать цифровую клавиатуру, которая выглядит как клавиатуры в приложении запас калькулятор, который поставляется по умолчанию в Lollipop ОС:
Там Похожая приложение калькулятор в GitHub (https://github.com/numixproject/com.numix.calculator), который имеет эффект пульсации на клавиатуре, но поскольку я читаю код, похоже, что он использует кнопки для цифровых клавиш вместо KeyboardView.
Надеюсь, эффект пульсации можно выполнить с помощью KeyboardView, так как у моего приложения уже реализована пользовательская цифровая клавиатура с использованием KeyboardView, и мне не хотелось бы менять ее на использование кнопок.
Я попытался добавить рябь в качестве атрибута keyBackground
от стиля, как это:
<android.inputmethodservice.KeyboardView
android:id="@+id/numeric_keypad"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:focusable="true"
android:focusableInTouchMode="true"
style="@style/my_numeric_keypad" />
Тогда в themes.xml:
<style name="my_numeric_keypad">
<item name="android:keyTextSize">30dp</item>
<item name="android:fontFamily">roboto</item>
<item name="android:keyBackground">@drawable/numeric_keypad_ripple</item>
<item name="android:keyTextColor">@android:color/white</item>
</style>
и затем numeric_keypad_ripple.xml в вытяжке-v21 папка:
<?xml version="1.0" encoding="UTF-8" ?>
<ripple
xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:colorControlHighlight">
<item android:drawable="@drawable/numeric_keypad_states"/>
</ripple>
numeric_keypad_states.xml - это старый селектор с прессой ред состояние (оно используется для объявляться прямо как атрибут keyBackground
):
<?xml version="1.0" encoding="UTF-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/numeric_keypad_pressed" />
<item android:drawable="@drawable/numeric_keypad_normal" />
</selector>
numeric_keypad_pressed.xml и numeric_keypad_normal.xml является только рисует с цветом для каждого конкретного государства, как это (и точно так же, просто отличаются атрибутом цвета):
<?xml version="1.0" encoding="UTF-8" ?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle">
<solid android:color="@color/numeric_keypad_pressed_color"/>
</shape>
</item>
</layer-list>
Я думал, что мой подход выше будет работать; но это не так. В моем устройстве Lollipop, когда я нажимаю на клавиатуру, он просто показывает нормальный нажатый цвет без каких-либо пульсаций вообще, никакой разницы в моей старой реализации без пульсации. Я попытался удалить слой, потому что я думал, что это как-то перекрывает рябь, но все равно не работает. Добавление маски к пульсации также не работает.
Я также попытался использовать rippledrawable в качестве нажатого состояния, которое можно было бы вырезать в селекторе вместо того, чтобы обернуть селектор, но он все еще не работает. Также попытался использовать ?android:attr/selectableItemBackground
вместо rippledrawable, но также не работает.
И, о, я на самом деле разрабатываю приложение на Xamarin вместо родного Android, но это не должно иметь никакого значения, я полагаю.
Любая помощь приветствуется, спасибо заранее!
Рябь только работать правильно, если установить в качестве вида фоны (и несколько других экземпляров, например, переднего плана FrameLayout и селектора AbsListView). Они не будут работать в KeyboardView из-за того, как они обрабатывают рендеринг и касаются взаимодействия. – alanv
А я вижу, так что действительно невозможно использовать пульсацию на клавиатуре. Я подозревал это, но надеялся, что это все равно может быть сделано в некотором смысле. Спасибо за подтверждение, @alanv! – ABVincita