- 浏览: 85713 次
- 性别:
- 来自: 成都
最新评论
原址:http://marshal.easymorse.com/archives/3059
编写Android自定义按钮
写了个简单的android编写自定义效果的按钮,现在还不完整。不过效果出来了。见:
用手指按压按钮的效果:
手指抬起后,会有Toast提示:
实现按钮,这里没有通过Button类或者子类去做派生,而是通过TextView派生出来的。在这里三个按钮是三个TextView派生类实例,中间的白线,是1px宽的白色矩形,这样就可以做出类似上面的效果。
看布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@drawable/background_color">
<LinearLayout android:layout_width="fill_parent"
android:layout_height="10dip" />
<LinearLayout android:layout_width="fill_parent"
android:layout_height="40dip">
<com.easymorse.textbutton.TextButton
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:layout_weight="1" android:text="电影"
android:gravity="center_vertical|center_horizontal"
android:background="@drawable/button" android:focusable="true" android:clickable="true"/>
<View android:layout_width="2px" android:layout_height="fill_parent"
android:background="#ffffffff" />
<com.easymorse.textbutton.TextButton
android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true"
android:layout_weight="1" android:text="电视"
android:gravity="center_vertical|center_horizontal"
android:background="@drawable/button" android:focusable="true" />
<View android:layout_width="2px" android:layout_height="fill_parent"
android:background="#ffffffff" />
<com.easymorse.textbutton.TextButton
android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true"
android:layout_weight="1" android:text="明星"
android:gravity="center_vertical|center_horizontal"
android:background="@drawable/button" android:focusable="true" />
</LinearLayout>
</LinearLayout>
这里需要注意的几点:
- 对于布局的像素设置,一般要用dip,这样在更大或者更小的屏幕下展示可以自动适配,如果是px,是物理像素,这样在小的屏幕里面可能会显得大,在大的屏幕中显得小
- 在按钮布局中要使用android:focusable="true" android:clickable="true",这样才能比如通过轨迹球聚焦到按钮上,才能用手触摸按钮的时候触发事件
- 点击按钮变色,主要在android:background="@drawable/button"配置,button配置了点击事件发生后的背景色改变,而不需要编写代码
下面来看看drawable/button.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:constantSize="true">
<item android:state_focused="true">
<shape>
<gradient android:startColor="#FFE5CF33" android:endColor="#FFF1E7A2"
android:angle="90.0">
</gradient>
</shape>
</item>
<item android:state_enabled="true" android:state_pressed="false">
<shape>
<gradient android:startColor="#FF1B1B1B" android:endColor="#FF969696"
android:angle="90.0">
</gradient>
</shape>
</item>
<item android:state_enabled="true" android:state_pressed="true">
<shape>
<gradient android:startColor="#FF000000" android:endColor="#FF474747"
android:angle="90.0">
</gradient>
</shape>
</item>
<item android:state_enabled="false" android:state_pressed="true">
<shape>
<gradient android:startColor="#FF000000" android:endColor="#FF474747"
android:angle="90.0">
</gradient>
</shape>
</item>
<item>
<shape>
<gradient android:startColor="#FF000000" android:endColor="#FF474747"
android:angle="90.0">
</gradient>
</shape>
</item>
</selector>
这个文件中定义了当条目(也就是按钮)enable和(或)pressed的情况下的背景渐近色的配置情况。
实际上,上面介绍的部分,在不使用自定义按钮(也就是不是<com.easymorse.textbutton.TextButton而直接写<TextView…)的情况下,已经可以出现除了点击后Toast消息。
说一下TextView的派生类,其实只是在touche按钮的时候显示提示信息:
package com.easymorse.textbutton;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;public class TextButton extends TextView {
public TextButton(Context context) {
super(context);
}public TextButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}public TextButton(final Context context, AttributeSet attrs) {
this(context, attrs, 0);this.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_CANCEL
|| event.getAction() == MotionEvent.ACTION_UP
|| event.getAction() == MotionEvent.ACTION_OUTSIDE) {
Toast.makeText(context, "touched", Toast.LENGTH_SHORT).show();
}
return false;
}
});
}}
在这里主要是写了设置OnTouchListener的代码。
这里只针对3种情况才显示提示:
- 当手指从按钮抬起,ACTION_UP
- 取消,ACTION_CANCEL
- 手指移出按钮,ACTION_OUTSIDE
另外,要返回false,因为返回true,系统将不会调用drawable/button.xml的效果,因为true表示自己已经处理了onTouche事件,不需要别的逻辑再处理了。
源代码见:
发表评论
-
转 android背景选择器selector用法汇总
2011-04-27 15:23 1353原址:http://blog.sina.com.cn/s/bl ... -
(转)android button 效果设计
2011-04-26 15:04 1402原址:http://ssd910.blog.163.com/b ... -
(转)消息机制细谈(message handler looper MessageQueue )
2011-04-12 11:20 1061在handler的简单用 ... -
解决:sqlite数据库含有\n的值或者sax解析xml有\n的值付给TextView,显示却不会换行
2011-03-17 23:00 2950遇到个问题,网上也有人问 从sqlite数据库取含有\n的值 ... -
资料分享 android api dev guid中文(Android开发指南中文版.doc)
2011-03-11 14:12 1447资料分享 android api dev guid中文 ... -
apk反编译问题总结(转)
2011-03-09 15:01 2775http://www.eoeandroid.com/thre ... -
PendingIntent和Intent的区别 转
2011-03-04 14:35 1241Notification notification ... -
转:动态添加/删除spinner菜单--ArrlayList与Widget依赖性
2011-02-24 14:28 1758package irdc.ex04_09; import a ... -
Dialog 2种显示方式
2011-02-23 17:35 1342建议用onCreateDialog(int)和 show ... -
【转】 Array ,Simple ,SimpleCursor Adapter 区别
2011-02-12 16:01 1830原址:http://www.eoeandroid.com ... -
转 【通知 Toast详细用法(显示view)】 【android Toast大全(五种情形)建立属于你自己的Toast】
2011-02-11 10:36 3059原文地址: http://www.pocketdigi. ... -
(转 Android UI学习 - Menu)
2011-02-09 14:19 1374标签:Android menu 原创作品,允许转载,转载时 ...
相关推荐
`RadioGroup`是Android系统中用于管理多个单选按钮(`RadioButton`)的容器,通常限制用户只能选择其中一项。 首先,理解`RadioGroup`的工作原理至关重要。`RadioGroup`默认使用线性布局,如水平或垂直方向,将`...
总结起来,自定义Android开关按钮涉及多个方面,包括设计资源、编写自定义View代码、处理触摸事件以及考虑兼容性和性能。通过这个过程,开发者可以创造出符合应用风格的个性化开关按钮,提升用户交互体验。
总之,自定义按钮控件是Android开发中的一项重要技能,通过深入研究CUILib,开发者不仅可以掌握自定义控件的基本原理,还能进一步提升对Android系统API的理解和使用。因此,对于任何希望在Android领域有所建树的...
在Android开发中,自定义按钮(Custom Button)是提升应用界面独特性和用户体验的重要手段。一个具有荧光灯效果的按钮可以极大地增加应用的视觉吸引力,让操作反馈更加鲜明。本篇将详细介绍如何在Android中创建这样...
Android 自定义按钮点击事件和长按事件对比 Android 自定义按钮点击事件和长按事件对比是 Android 应用开发中经常遇到的问题。在 Android 中,我们可以通过设置OnClickListener 和 OnLongClickListener 来实现按钮...
这个“android自定义的Android计算器源码_AS”项目为我们提供了一个学习和参考的实例。下面我们将深入探讨这个项目的知识点。 1. **Android Studio集成开发环境**: Android Studio是Google官方推荐的Android应用...
2. **编写自定义View类**:继承自`android.view.View`或者`android.widget.Switch`,并重写必要的方法,如`onDraw()`来绘制开关的外观,`onTouchEvent()`处理触摸事件,实现滑动切换功能。 3. **状态设置**:在XML...
在自定义控件中,你需要编写逻辑来处理用户的选择,比如当用户滚动时间轴时,更新显示的时间值。你可以使用`ValueAnimator`或者`ObjectAnimator`来实现平滑的动画效果,增加用户体验。 4. **数据绑定与事件监听** ...
在Android平台上,自定义手机通讯录是一个常见的需求,它涉及到数据管理、用户界面设计和交互等多个方面的技术。本文将深入探讨如何实现一个自定义的Android通讯录,包括排序、搜索功能,并提供一个可供参考的demo。...
在Android开发中,自定义Dialog是一种常见的需求,用于提供一种轻量级的用户交互界面,如提示信息或者进行选择操作。本示例是关于如何创建一个具有多选功能的Dialog,结合了Dialog、ListView和CheckBox的使用。下面...
在Android平台上,自定义相机功能是一项常见的需求,尤其对于那些希望提供独特拍摄体验的应用开发者来说。本教程将探讨如何在Android应用中实现自定义相机的连拍功能,这对于摄影爱好者或者需要快速捕捉连续图像的...
### Android自定义适配器的编写详解 在Android开发中,`ListView`是开发者们最为熟悉的组件之一,尤其是在游戏开发领域,它不仅适用于游戏排行榜,还能用于简单的游戏关卡选择等场景,展现了其广泛的应用潜力。尽管...
综上所述,Android自定义组件是提升应用体验和满足个性化需求的重要手段。通过熟练掌握自定义组件的创建方法和技巧,开发者能够更好地应对各种复杂场景,创造出独具特色的用户界面。在实际开发中,结合属性动画、...
2. **事件处理**:除了基本的点击事件外,自定义按钮还可以扩展其他交互事件,如鼠标悬停、长按、拖动等,并编写相应的处理代码。 3. **行为扩展**:自定义按钮的行为可以不仅仅是简单的点击响应,还可以包含复杂的...
总结来说,Android自定义View的实现涉及多个方面,包括继承基类、重写绘图方法、定义和使用自定义属性、处理触摸事件等。通过这些技巧,开发者可以构建出强大且灵活的组件,为应用带来独特的视觉效果和交互体验。而...
通过这个自定义控件,开发者可以在应用中快速创建具有加减功能的输入框,无需编写大量重复代码。同时,修复的bug和XML实例化功能使得这个控件更加稳定和易用,提高了开发效率。在实际项目中,我们可以根据需求进一步...
本篇文章将详细探讨如何实现一个Android自定义组件——卫星菜单(Satellite Menu),也称为ArcMenu。卫星菜单是一种以中心按钮为触发点,围绕中心点展开的一组按钮布局,常用于导航或展示附加功能。 首先,我们定义...
6. **集成到项目**:在完成自定义控件的编写后,需要将其添加到项目的build.gradle文件中,然后在布局XML文件中引用这个自定义控件,并设置相应的属性。 7. **示例代码**:SwitchViewDemo项目可能包含了实现自定义...
以上内容涵盖了Android自定义属性控件的基本实现,包括自定义属性、自定义控件的绘制与交互,以及简单的Tab控件封装。通过这些技术,开发者可以构建出功能强大且具有个性化风格的Android应用。在实际项目中,还需要...
本篇将详细介绍如何在Android中创建自定义的Dialog弹窗提示。 首先,我们需要理解Dialog的基本结构。Dialog通常由一个对话框窗口和一个内容视图组成。窗口负责Dialog的整体外观,包括背景、边框和阴影等;内容视图...