电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

android自定義加減按鈕

瀏覽:50日期:2022-09-25 10:14:03

本文實(shí)例為大家分享了android自定義加減按鈕的具體代碼,供大家參考,具體內(nèi)容如下

1、定義兩個(gè)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: 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: android:color='#007FFF' /> <corners android:radius='5dip' /> <padding android:bottom='1dp' android:left='10dp' android:right='10dp' android:top='1dp' /></shape>

2、定義一個(gè)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: 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: 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: 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監(jiān)聽:

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,定義兩個(gè)線程用來加減:

// 減操作 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進(jìn)行處理:

Handler myHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub if (msg.what == 1) { //加操作 } else if (msg.what == 2) { //減操作 } } };

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 高铝砖-高铝耐火球-高铝耐火砖生产厂家-价格【荣盛耐材】 | 紫外可见光分光度计-紫外分光度计-分光光度仪-屹谱仪器制造(上海)有限公司 | 检验科改造施工_DSA手术室净化_导管室装修_成都特殊科室建设厂家_医疗净化工程公司_四川华锐 | 百度关键词优化_网站优化_SEO价格 - 云无限好排名 | 泰国试管婴儿_泰国第三代试管婴儿_泰国试管婴儿费用/多少钱_孕泰来 | 上海皓越真空设备有限公司官网-真空炉-真空热压烧结炉-sps放电等离子烧结炉 | 民用音响-拉杆音响-家用音响-ktv专用音响-万昌科技 | 管理会计网-PCMA初级管理会计,中级管理会计考试网站 | 柴油发电机组_柴油发电机_发电机组价格-江苏凯晨电力设备有限公司 | 杰福伦_磁致伸缩位移传感器_线性位移传感器-意大利GEFRAN杰福伦-河南赉威液压科技有限公司 | 美的商用净水器_美的直饮机_一级代理经销商_Midea租赁价格-厂家反渗透滤芯-直饮水批发品牌售后 | 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 金联宇电缆总代理-金联宇集团-广东金联宇电缆实业有限公司 | 铣刨料沥青破碎机-沥青再生料设备-RAP热再生混合料破碎筛分设备 -江苏锡宝重工 | 岩棉切条机厂家_玻璃棉裁条机_水泥基保温板设备-廊坊鹏恒机械 | 威海防火彩钢板,威海岩棉复合板,威海彩钢瓦-文登区九龙岩棉复合板厂 | 华夏医界网_民营医疗产业信息平台_民营医院营销管理培训 | 水性绝缘漆_凡立水_绝缘漆树脂_环保绝缘漆-深圳维特利环保材料有限公司 | 工业淬火油烟净化器,北京油烟净化器厂家,热处理油烟净化器-北京众鑫百科 | 深圳APP开发公司_软件APP定制开发/外包制作-红匣子科技 | 预制直埋蒸汽保温管-直埋管道-聚氨酯发泡保温管厂家 - 唐山市吉祥保温工贸有限公司 | 防勒索软件_数据防泄密_Trellix(原McAfee)核心代理商_Trellix(原Fireeye)售后-广州文智信息科技有限公司 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 冲击式破碎机-冲击式制砂机-移动碎石机厂家_青州市富康机械有限公司 | 分轨 | 上传文件,即刻分离人声和伴奏 | 喷砂机厂家_自动除锈抛丸机价格-成都泰盛吉自动化喷砂设备 | 广州番禺搬家公司_天河黄埔搬家公司_企业工厂搬迁_日式搬家_广州搬家公司_厚道搬迁搬家公司 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 | 传动滚筒_厂家-淄博海恒机械制造厂| 六自由度平台_六自由度运动平台_三自由度摇摆台—南京全控科技 | 微动开关厂家-东莞市德沃电子科技有限公司| 杭州中策电线|中策电缆|中策电线|杭州中策电缆|杭州中策电缆永通集团有限公司 | 探伤仪,漆膜厚度测试仪,轮胎花纹深度尺厂家-淄博创宇电子 | 不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰]-不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰] | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 承插管件_不锈钢承插管件_锻钢高压管件-温州科正阀门管件有限公司 | 智能型高压核相仪-自动开口闪点测试仪-QJ41A电雷管测试仪|上海妙定 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 水篦子|雨篦子|镀锌格栅雨水篦子|不锈钢排水篦子|地下车库水箅子—安平县云航丝网制品厂 | 右手官网|右手工业设计|外观设计公司|工业设计公司|产品创新设计|医疗产品结构设计|EMC产品结构设计 | 旋片真空泵_真空泵_水环真空泵_真空机组-深圳恒才机电设备有限公司 |