Android柳叶刀之Button之UI交互

360°全景影像移动端类库--PanoramaGL 介绍         本指南将介绍一个PanoramaGL 0.1类库的简单用法,更多的细节请签出HelloPanoramaGL示例查看。 细节 1如何导入PanoramaGL类库? 1.1从源代码中导入 a下载PanoramaGL_0.1.zip或从代码仓库下载源代码 b如果你下载zip文件然后解压该文件 c在Eclipse中导入PanoramaGL项目: 点击“File”选择“ 阅读详情

传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229


柳叶刀

        穆念慈眼见势危,从腰间拔出柳叶刀,刷刷两刀,向他迎头砍去。 
        完颜萍年纪甚轻,但刀法狠辣,手中柳叶刀锋利异常,连砍数刀,已将板凳的四只凳脚砍去。 
        陆无双的银弧弯刀失去以后:敌对的两女一个手持柳叶刀,另一个兵刃似是一管洞萧,两人身形婀娜,步法迅捷,武功也自不弱,但和李莫愁相抗总是不及。……陆无双伸手拔出柳叶刀,转过身来,见说话的正是郭芙。

        今天我们观察Android平台“柳叶刀”Button焦点的变化情况,在点击、触摸、键盘按键等事件触发时,按钮都会随之发生焦点的改变。下面给出该情景的案例:

1案例技术要点

(1)为Button所在Activity实现OnClickListener、OnTouchListener、OnFocusChangeListener、OnKeyListener四类事件监听。
(2)为Button(带图片)设置分别设置OnClickListener、OnTouchListener、OnFocusChangeListener、OnKeyListener四类事件监听。
(3)android.view.View.OnClickListener:点击事件监听
(4)android.view.View.OnFocusChangeListener:焦点变化事件监听
(5)android.view.View.OnKeyListener:键盘按键事件监听
KeyEvent.ACTION_DOWN:按键按下时触发该事件
KeyEvent.ACTION_UP:按键弹起时触发该事件
(6)android.view.View.OnTouchListener:触摸事件监听 
MotionEvent.ACTION_DOWN:触摸时触发该事件
MotionEvent.ACTION_UP:触摸离开时触发该事件

2案例代码陈列

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.button"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".ButtonMainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

strings.xml

<resources>
    <string name="app_name">Button的焦点变化</string>
    <string name="button1">按钮一</string>
    <string name="button2">按钮二</string>
</resources>

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/common_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button1" />

    <Button
        android:id="@+id/image_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/button1"
        android:gravity="center"
        android:text="@string/button2" />

</LinearLayout>

ButtonMainActivity.java

package com.android.button;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.View.OnKeyListener;
import android.view.View.OnTouchListener;
import android.widget.Button;

/**
 * Button案例一:按钮的焦点变化
 * @author lynnli1229
 */
public class ButtonMainActivity extends Activity implements OnClickListener,
        OnTouchListener, OnFocusChangeListener, OnKeyListener {
    //用于改变按钮的大小
    private int value = 1;
    private Button commonButton;
    private Button imageButton;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        commonButton = (Button) findViewById(R.id.common_button);
        imageButton = (Button) findViewById(R.id.image_button);
        commonButton.setOnClickListener(this);
        imageButton.setOnClickListener(this);
        imageButton.setOnTouchListener(this);
        imageButton.setOnFocusChangeListener(this);
        imageButton.setOnKeyListener(this);
        
    }

    //当按钮被按下或松开时回调该方法
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if(KeyEvent.ACTION_DOWN == event.getAction()) {
            v.setBackgroundResource(R.drawable.button3);
        } else if(KeyEvent.ACTION_UP == event.getAction()) {
            v.setBackgroundResource(R.drawable.button2);
        }
        return false;
    }

    //当按钮焦点发生改变时回调该方法
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if(hasFocus) {
            imageButton.setBackgroundResource(R.drawable.button2);
        } else {
            imageButton.setBackgroundResource(R.drawable.button1);
        }

    }

    //当按钮被触摸时回调该方法
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_UP) {
            v.setBackgroundResource(R.drawable.button1);
        } else if(event.getAction() == MotionEvent.ACTION_DOWN) {
            v.setBackgroundResource(R.drawable.button2);
        }
        return false;
    }

    //当按钮被点击时回调该方法
    @Override
    public void onClick(View v) {
        Button button = (Button) v;
        if (value == 1 && button.getWidth() == getWindowManager().getDefaultDisplay().getWidth()) {
            value = -1;
        } else if (value == -1 && button.getWidth() < 100) {
            value = 1;
        }
        button.setWidth(button.getWidth() + (int) (button.getWidth() * 0.1) * value);
        button.setHeight(button.getHeight() + (int) (button.getHeight() * 0.1) * value);
    }

}

        友情提示:提供三张展示按钮焦点变化的图片存放于drawable-hdpi文件夹下。

3案例效果展示

 
如何高效使用和管理Bitmap--图片缓存管理模块的设计与实现 传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229         上周为360全景项目引入了图片缓存模块。因为是在Android4.0平台以上运作,出于惯性,都会设计之前查阅相关资料,尽量避免拿一些以前2.3平台积累的经验来进行类比处理。开发文档中有一个BitmapFun的示例,仔细拜读了一下,虽说围绕着Bitmap的方方面面讲 阅读详情

相关推荐

Android代码-lancet

Lancet Chinese README Lancet is a lightweight AOP framework for Android. It's fast and just take up a little time during compiling. Also, it supports incremental compiling. But it provides great api to help you coding in Android. It takes no runtime jar. In addition, not only App developers but also SDK developers can use Lancet. Usage Installation Firstly, add following code in root build.gradle of your project. dependencies{ classpath 'me.ele:lancet-plugin:1.0.4' } And then, add following

Android柳叶刀之Button之图文并茂

传送门☞轮子的专栏☞转载请注明☞http://blog.youkuaiyun.com/leverage_1229 柳叶刀 使刀的正是那蓝衫女郎阿珂,她见澄观缩手,柳叶刀疾翻,向他腰间横扫。便在这时,绿衫女郎也已从松林中窜出,挥刀向韦小宝砍去。 今天我们学习如何利用Android平台“柳叶刀”Button实现图文混搭的风格,下面给出该情景的案例:...

weixin_30757793的博客 186

集成电路设计笔记(七)UVLO设计

1. 什么是UVLO 欠压锁定(Undervoltage-Lockout)简称UVLO,是电子设备中在电源电压低于正常工程准位时,切断电源的电路。在嵌入式系统中常会用UVLO监控电池电压,若电压低于一定值,会直接切断电源,保护嵌入式系统的电路。 许多电子设备中都有UVLO的功能,例如在镇流器中就有UVLO电路,若电压过低时直接切断电源。 UVLO就是低电压锁定; 低压关断. 欠压关断模式是当供电电压低于IC的开启门限电压时的一种保护模式。欠压关断模式可保证IC在供电电压不足时不致于被损坏。一个低电压锁定(

ccbirds 2万+

android KeyEvent中各种值

/** Key code constant: Unknown key code. */ public static final int KEYCODE_UNKNOWN = 0; /** Key code constant: Soft Left key. * Usually situated below the display on phones and used as a mul

demodashi666的博客 1万+

三相直流无刷电机(带HALL传感器)BLDC控制一

本案例选择TIM0的CH0/CH1/CH2三个通道接入三路原始hall输出信号。三路TIM_CHx(48)通过配置存入到NIP寄存器(new input pattern,3 bits)内。未完待续。

m0_69929716的博客 405

snipersim安装

snipersim安装记录,便于后续使用tip:snipersim需要在python2的环境下编译。

weixin_53507617的博客 917

【Android入门】button按钮绑定的五种方法-方法详解

方法一:XML文件绑定    在Button控件上设置android:onClick=",其中这个属性的属性值对应的是MainActivity类中的方法名字(自己创建的方法)    在MainActivity类中创建相对应的方法方法二:匿名内部类设置布局创建按钮对象绑定按钮:事件监听...

mmciel 5279

QT窗体大小控制全攻略:从setFixedSize到事件过滤器的进阶用法

本文深入探讨了QT窗体尺寸控制的进阶实践,从基础的setFixedSize方法到结合事件过滤器实现智能动态适配。通过分析窗口状态变化、多显示器环境处理以及布局策略,提供了实现禁止缩放但支持最大化、多屏智能适配及动态约束等复杂场景的完整解决方案与核心代码示例。

weixin_29229261的博客 299

android之TextVIew与Button交互

EX03_13Activity public class EX03_13Activity extends Activity { Button myButton; TextView myTextView; int num = 0; int[] Textcolor = {Color.BLUE,Color.GREEN,Color.CYAN}; /** Called when the a

似水流云 1856

CTF实战:Flask Session流量解密与内存马路由追踪

本文通过一道CTF实战题目,详细解析了Flask Session流量解密与内存马路由追踪的全过程。文章从破解前端加密密码入手,逐步揭示如何利用泄露的SECRET_KEY解密Session,发现命令执行痕迹,并最终追踪到攻击者植入的内存马路由。内容涵盖Wireshark流量分析、flask-unsign工具使用等实战技巧,为CTF选手和安全研究人员提供了一套完整的Flask应用安全分析思路。

weixin_28309571的博客 306

告别Link180!在Ansys Mechanical 2020R2中正确启用Cable280绳索单元(附Beta选项开启指南)

本文详细介绍了在Ansys Mechanical 2020R2中启用Cable280绳索单元的全过程,包括Beta选项的开启步骤、建模技巧及高阶应用。Cable280作为专为绳索仿真设计的单元,相比传统的Link180单元,在大变形模拟和计算效率上表现更优,特别适合斜拉桥、电梯牵引绳等工程场景。

weixin_33711647的博客 405

Android事件分发机制完全解析,带你从源码的角度彻底理解(上)

Android事件分发机制完全解析,带你从源码的角度彻底理解(上) 分类: Android疑难解析2013-06-20 08:30 1901人阅读 评论(13) 收藏 举报 Android事件分发onTouchdispatchTouchEventonTouchEvent 转载请注明出处:http://blog.youkuaiyun.com/sinyu890807/article/de

pi9nc的专栏 6万+

questasim的傻瓜式安装与仿真教程

一、安装 1、下载软件 链接:https://pan.baidu.com/s/1S05AnO_w-wy6RsAj_kdUXg 提取码:p2nt 2、根据电脑类型是32位还是64位,解压不同安装包。 解压得: 2、运行.exe文件,出现: 问题及解决办法: 这是杀毒软件造成的,因此在安装过程中关闭杀毒软件即可。关闭之后,再次运行.exe文件。 3、点击下一步,进入选择安装位置界面,如下:选择好安装位置后点击下一步。 4、点击同意 5、接下来等待安装结束即可,在安装过程中,会跳出来弹框,询问是否要添

树下等苹果的博客 3万+

Android定制组件之图文展示之中国好声音

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229         今天我们学习如何自定义TextView组件,让它既能显示文本,又能显示图像,达到“图文并茂”的效果。这种情景在新闻、文章、彩信内容中很常见。下面给出该场景的案例: 一、案例技术要点 1.创建attrs.xml文件用于设置自定义组件的属性、类型和样式。

leverli的专栏 1万+

【libnice】meson + vs2022,生成win32工程

libnice

突围 947

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

让你的Android应用与外部元素互动起来

一个Android应用程序通常有几个activities。每个act显示一个用户接口允许用户执行一个指定的任务。用户从一个act到另一个act,你的App必须使用一个Intent对象来定义你App想做些什么事。当你通过一个Intent调用startActivity()方法时,系统会使用Intent来鉴定和启动合适的App组件。一个Intent可以明确的启动一个特定的组件(如一个特定的act实例)或

leverli的专栏 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Android倚天剑之Notification之动感地带

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229         前

leverli的专栏 9935

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Android凝碧剑之CalendarView之万年历

传送门 ☞ Android兵器谱 ☞ http://blog.youkuaiyun.com/leverage_1229 凝碧剑         张召重一挺凝碧剑,纵到陈家洛身前,说道:“你年纪轻轻,居然有这身功夫,你师父是谁?”。。。周绮拿了凝碧剑细看,找了几柄纯钢旧刀剑,一剑削下,应手而断,果然锐利无匹。徐天宏在一旁微笑注视。         今天我们学习如何利用Android平台“凝

leverli的专栏 7896

Android昆仑镜之Fragment

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 紫衫龙王

leverli的专栏 7554

使用严苛模式打破Android4.0以上平台应用中UI主线程的“独断专行”

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229         已经有

leverli的专栏 7134

Android倚天剑之Notification之城管三千

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229         如果说足球是和平年代的战争,那么城管呢?伟大的人民曲艺家郭德纲先生曾经这样评价:借我城管三千,我能让世界和平!可见在当今社会中城管的威慑力有多大,尤其是中国的城管,你懂的^_^。本文欲借城管之名来引出Android平台对通知的管理也是十分强大的。话说

leverli的专栏 6194

Android常用布局之LinearLayout之简易计算器

传送门 ☞ Android兵器谱 ☞转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 一、布局(Layout)         简单的说,Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成,都会在AndroidManifest.xml中指定一个主的Activity,如下设置:

leverli的专栏 5927

Android倚天剑之Notification之江南style

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229         上回我们提到在4.0ICS之后,Google为Android平台的Notification这把“倚天剑”注入了更多新鲜的元素,使其更加实用美观。Notification的样式从此变得丰富起来,以适应于不同情景的需要。就像最近非常流行的神曲《江南sty

leverli的专栏 5718

Android应用开发之多选删除之一

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229         今天我们学习一下如何利用CheckBox实现对联系人记录的多选删除,多选删除功能在平时工作中经常会遇到,通常有两种解决方案:CheckBox实现和ActonBar实现。本人偏爱CheckBox样式的多选模式,因为它实现起来比较灵活多变,样式变换也很容易。

leverli的专栏 5020

Android应用开发之版本更新你莫愁

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229         今天我们学习如何实现Android应用的自动更新版本功能,这是在各种语言编写的应用中都会经常遇到的情景。当我们的应用检测到网络上有新版本发布时,系统会提示是否下载新版本应用,当新版本应用下载完毕后,系统会自动安装下载的新版本应用(或跳转到相关安装页面询问

leverli的专栏 4904
上一篇: GoF23种设计模式之行为型模式之观察者模式
下一篇: Android金背大刀之ToggleButton之稍息立正
innovation
博客等级 码龄14年 251粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值