1.定义两个shape:
my_button_shape_normal.xml:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <stroke android:width="1dp" android:color="#007FFF" /> <corners android:radius="5dip" /> <padding android:bottom="1dp" android:left="10dp" android:right="10dp" android:top="1dp" /> </shape>
my_button_shape_pressed.xml:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <stroke android:width="1dp" android:color="#007FFF" /> <corners android:radius="5dip" /> <padding android:bottom="1dp" android:left="10dp" android:right="10dp" android:top="1dp" /> </shape>
2。定义一个drawable:my_button_style.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/my_button_shape_normal" android:state_focused="false" android:state_pressed="false"></item> <item android:drawable="@drawable/my_button_shape_pressed" android:state_focused="false" android:state_pressed="true"></item> </selector>
3.定义button布局(mybutton.xml):
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/reduce" android:layout_width="50dp" android:layout_height="30dp" android:background="@drawable/my_button_style" android:gravity="center" android:paddingBottom="10dp" android:text="-" android:textColor="#007FFF" /> <Button android:id="@+id/add" android:layout_width="50dp" android:layout_height="30dp" android:layout_toRightOf="@+id/reduce" android:background="@drawable/my_button_style" android:gravity="center" android:paddingBottom="10dp" android:text="+" android:textColor="#007FFF" /> </RelativeLayout>
4.定义MyButton类:
public class MyButton extends RelativeLayout { private View view; private Button add, reduce; private OnAddReduceChangeStatusListener mAddReduceChangeStatusListener; public MyButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } public MyButton(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub view = LayoutInflater.from(context).inflate(R.layout.mybutton, this, true); init(); } public MyButton(Context context) { super(context); // TODO Auto-generated constructor stub } private void init() { add = (Button) view.findViewById(R.id.add); reduce = (Button) view.findViewById(R.id.reduce); add.setOnTouchListener(new ComponentOnTouch()); reduce.setOnTouchListener(new ComponentOnTouch()); } class ComponentOnTouch implements OnTouchListener { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.add: if (mAddReduceChangeStatusListener != null) { mAddReduceChangeStatusListener.add(MyButton.this.getId(),event.getAction()); } break; case R.id.reduce: if (mAddReduceChangeStatusListener != null) { mAddReduceChangeStatusListener.reduce(MyButton.this.getId(),event.getAction()); } break; } return true; } } public void setOnAddReduceChangeStatusListener(OnAddReduceChangeStatusListener listener) { this.mAddReduceChangeStatusListener = listener; } public abstract interface OnAddReduceChangeStatusListener { public abstract boolean add(int viewId,int eventAction); public abstract boolean reduce(int viewId,int eventAction); } }
5。布局中使用:
<package.MyButton android:id="@+id/mybutton_id" android:layout_width="wrap_content" android:layout_height="wrap_content" > </package.MyButton>
6.代码中使用:
a.初始化:
mybutton = (MyButton) findViewById(R.id.mybutton_id); mybutton.setOnAddReduceChangeStatusListener(new OnAddReduceListener());
b.listener监听:
class OnAddReduceListener implements OnAddReduceChangeStatusListener { @Override public boolean add(int viewId, int eventAction) { // TODO Auto-generated method stub if (eventAction == MotionEvent.ACTION_DOWN) { onTouchChange("add"); } else if (eventAction == MotionEvent.ACTION_UP) { if (plusThread != null) { isOnLongClick = false; } } else if (eventAction == MotionEvent.ACTION_MOVE) { if (plusThread != null) { isOnLongClick = true; } } else if (eventAction == MotionEvent.ACTION_CANCEL) { if (plusThread != null) { isOnLongClick = false; } } return true; } @Override public boolean reduce(int viewId, int eventAction) { // TODO Auto-generated method stub if (eventAction == MotionEvent.ACTION_DOWN) { onTouchChange("reduce"); } else if (eventAction == MotionEvent.ACTION_UP) { if (miusThread != null) { isOnLongClick = false; } } else if (eventAction == MotionEvent.ACTION_MOVE) { if (miusThread != null) { isOnLongClick = true; } } else if (eventAction == MotionEvent.ACTION_CANCEL) { if (miusThread != null) { isOnLongClick = false; } } return true; } } private void onTouchChange(String method) { if (method.equals("add")) { plusThread = new PlusThread(); isOnLongClick = true; plusThread.start(); } else if (method.equals("reduce")) { miusThread = new MiusThread(); isOnLongClick = true; miusThread.start(); } }
c,定义两个线程用来加减:
// 减操作 class MiusThread extends Thread { @Override public void run() { while (isOnLongClick) { try { Thread.sleep(200); myHandler.sendEmptyMessage(1); } catch (InterruptedException e) { e.printStackTrace(); } super.run(); } } } // 加操作 class PlusThread extends Thread { @Override public void run() { while (isOnLongClick) { try { Thread.sleep(200); myHandler.sendEmptyMessage(2); } catch (InterruptedException e) { e.printStackTrace(); } super.run(); } } }
使用Handler进行处理:
Handler myHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub if (msg.what == 1) { //加操作 } else if (msg.what == 2) { //减操作 } } };
相关推荐
本文实例为大家分享了android自定义加减按钮的具体代码,供大家参考,具体内容如下 1、定义两个shape: my_button_shape_normal.xml: <?xml version=1.0 encoding=utf-8?> <shape xmlns:android=...
本文将深入探讨如何在Android中创建一个带有加减按钮的EditText控件,该控件常用于输入数量或者评分等场景。我们将分析需求、设计思路,并通过具体的代码实现来详细讲解。 需求分析: 1. 在EditText控件的左右两侧...
通过这种方式,我们成功地创建了一个自定义的EditText加减按钮组件,可以根据需求在Android应用中灵活使用。这个组件不仅可以控制数值的增减,还可以进行扩展,例如添加数值验证、设置最大最小值限制等功能,以满足...
"Android 自定义加减选择器(适用于商城购物)"就是一个典型的例子,它用于电子商城中商品数量的增减操作,用户可以通过点击加减按钮或者直接输入数字来调整购物车中的商品数量。这个自定义控件不仅提升了交互的便捷...
可以使用`drawRect()`、`drawText()`等方法绘制加减按钮和数字。同时,可以使用`setPadding()`和`setMargin()`方法来设置内边距和外边距,使控件看起来更美观。 4. **事件监听**: 需要为加号和减号按钮设置点击...
本教程将深入探讨如何创建一个自定义的EditText控件,该控件在其两侧添加了加减按钮(Button),以实现数字的增减操作。这样的设计常见于商品数量选择、评分系统等场景。 首先,我们需要创建一个新的View类,继承自...
此外,我们还需要为加减按钮设置点击监听器,以便在用户点击时更新EditText的值。 ```java public class AddAndSubView extends ViewGroup { private EditText editText; private Button plusButton, minusButton...
B_通过加减按钮操作数字 C_监听加减按钮 D_数组有最小值和最大值的限制 E_自定义属性 2.提供接口,让外界监听到数字的变化 1_设置接口 @Override public void onClick(View v) { if (v.getId() == R.id.btn_sub)...
这个键盘可以根据实际需求进行扩展,例如添加更多特殊功能按钮,如加减乘除符号,或者增加对多行文本的支持。同时,也可以考虑优化键盘的视觉样式,使其与应用程序的整体设计风格保持一致。通过自定义键盘,开发者...
这个“android自定义的Android计算器源码_AS”项目为我们提供了一个学习和参考的实例。下面我们将深入探讨这个项目的知识点。 1. **Android Studio集成开发环境**: Android Studio是Google官方推荐的Android应用...
Android 购物车加减功能的实现代码 Android 购物车加减功能是指在 Android 应用程序中实现购物车中商品数量的加减操作。这种功能对于电子商务应用程序非常重要,因为它可以让用户方便地购买商品。この文章将详细...
在Android开发中,自定义控件是提升应用界面独特性...对于想要深入学习Android自定义控件的开发者来说,这是一个很好的实践案例。通过阅读和分析源码,可以提升对Android视图机制的理解,为自己的项目增添更多可能性。
`NumberPickerView`是这样一个自定义控件,它模仿了商城购物界面中常见的一种数量选择器,允许用户通过点击加减按钮或者直接输入数字来改变商品的数量。本文将详细讲解`NumberPickerView`的实现原理、特点以及如何在...
本压缩包“安卓EditText输入框相关-自定义EditText带加减的.rar”提供的示例可能是为了实现一个带有加减按钮的EditText,允许用户在输入数字时进行增加或减少操作,这种功能常用于购物车数量调整等场景。 要实现...
1. **设计布局**:使用XML布局文件设计软键盘的界面,包括数字按钮、操作符按钮(如加减乘除)以及清除键等。每个按钮需要设置相应的点击事件监听器。 2. **生成随机顺序**:使用`java.util.Random`类生成0-9的...
在描述中,“高仿美团购物时候加减”表明该控件的设计灵感来源于美团购物过程中的数量增减按钮,它具有直观易用的交互设计,用户可以通过点击加号或减号来调整商品数量。“对于写购物车的有写邦助”意味着这个自定义...