Чтобы увеличить размер кнопки при нажатии в Android
Как сделать так, чтобы размер кнопки немного увеличивался при ее нажатии и уменьшался снова при отпускании? Это для выделения нажатой кнопки, используя размер в дополнение к другому цвету.
С уважением, Кики
3 ответа
Сделай свой Button
поле, и измените его размер в OnTouchListener
связано с этим. Используя OnTouchListener вы можете слушать разные MotionEvents
, такие как ACTION_DOWN
а также ACTION_UP
,
Начиная с API 21 (Lollipop) доступно только xml-решение на основе атрибута stateListAnimator. Несмотря на то, что его основная цель - анимировать свойства представления на основе изменений состояния, вы можете отключить анимацию, если это требуется, установив
duration="0"
. Например:
<!-- res/layout/my_layout.xml -->
<LinearLayout ...
android:stateListAnimator="@animator/zoom_animator">...</layout>
<!-- res/animator/zoom_animator -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<set>
<objectAnimator android:propertyName="scaleX" android:valueTo="1.0" android:duration="0" />
<objectAnimator android:propertyName="scaleY" android:valueTo="1.0" android:duration="0" />
</set>
</item>
<item android:state_pressed="true">
<set>
<objectAnimator android:propertyName="scaleX" android:valueTo="1.1" android:duration="0" />
<objectAnimator android:propertyName="scaleY" android:valueTo="1.1" android:duration="0" />
</set>
</item>
</selector>
Также есть два похожих вопроса об анимированном масштабе:
button.setOnTouchListener(новый View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)v.getLayoutParams();
//Code to convert height and width in dp.
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 35, getResources().getDisplayMetrics());
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 140, getResources().getDisplayMetrics());
if(event.getAction() == MotionEvent.ACTION_DOWN){
layoutParams.width = width + 5;
layoutParams.height = height + 5;
SearchButton.setLayoutParams(layoutParams);
}
if(event.getAction() == MotionEvent.ACTION_UP){
layoutParams.width = width;
layoutParams.height = height;
SearchButton.setLayoutParams(layoutParams);
}
return false;
}
});
В вашей деятельности
Private Button myButton;
//...
protected void onCreate(Bundle savedInstanceState) {
//...
myButton = (Button) findViewById(R.id.my_button);
_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
myButton.setWidth(50);
myButton.setHeight(50);
}
});
}
//Try it
Private Button myButton;
//...
protected void onCreate(Bundle savedInstanceState) {
//...
myButton = (Button) findViewById(R.id.my_button);
_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
myButton.setWidth(myButton.getWidth()+5);
myButton.setHeight(myButton.getHeight()+5);
}
});
}