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

避坑指南:RFSoC数据转换器多片同步配置的7个致命错误

本文深入剖析了在配置RFSoC多片同步功能时,工程师最常遇到的七个致命错误。从Tile 0的强制启用、时钟域与SYSREF时序,到跨代器件兼容性、电源序列以及动态重配置的陷阱,文章结合实战经验,提供了从原理到调试的完整RF数据转换器配置指南,旨在帮助开发者高效构建相位一致的大规模射频采样系统。

weixin_28452161的博客 533

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万+

uniapp 开发微信小程序请求问题 , 真机调试正常,开发工具正常,但是使用扫码预览接口都是不通的,发布到体验版也是请求失败

uniapp开发小程序体验版接口请求失败(真机可以)

weixin_60408555的博客 3954

软硬件协同设计的大小端问题

缘起 最近需要在soc系统内做协处理器,加速AES加密运算,寄存器一次读取32bit,AES一次处理128bit,因此在数据拼接的时候,需要考虑大小端的问题,特来记录一番。 一、什么是大小端 大小端的问题发生在寄存器和内存间传递数据,这点非常重要,很多地方简单地说是数据存储方式,其实不准确。追根溯源,大小端问题是在设计load,store指令的时候考虑的,因此本质是寄存器和内存交互的问题,其他地方不会发生。 比如c语言里定义一个变量int a=ox1234,那么查看在线汇编平台的对应汇编代码: # 给2号寄

http://www.icfgblog.com/ 613

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

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

mmciel 5279

IPD流程中CBB管理的5个致命误区,第3个坑了80%的团队

本文深入剖析了IPD流程中CBB管理的五个致命误区,尤其指出缺乏有效的度量与激励机制是影响80%团队的核心陷阱。文章强调CBB的核心在于前瞻性设计,而非简单归档,并需平衡通用性与产品竞争力,同时建立持续运营机制,确保CBB与市场需求对齐,从而真正实现缩短开发周期、降低成本的目标。

weixin_29234423的博客 569

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

VSS shielding线可以floating吗?

shielding vss不打孔,就相当于dummy metal,如果周围有其他干扰线,他们影响了这段dummy metal,这段dummy metal仍然会对目标线产生干扰,bug的是,工具知道这段dummy是vss,那么计算寄生的时候仍然把它当vss,就有可能噪声没有完全消除,而用户又看不见。而真正接地的线,相当于一直是0,就不会对目标线产生干扰,一般加shield是在route之前,这时候shield能尽量覆盖目标线,等到绕线后再加就会出现shield只覆盖到一部分目标线的情况。

m0_61544122的博客 6635

【工具插件类教学】Unity翻书效果插件Book-Page Curl Pro教程

特征: • 从左到右和从右到左翻页 • 与画布缩放器 配合使用 • 可配置的自动翻转脚本 • 支持向页面 添加 UI 元素 • 支持透明页面 • 适用于“世界空间”画布

纯技术流日常开发商业开发记录总结等 3673

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

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

pi9nc的专栏 6万+

【AI大模型应用开发实战】大型语言模型评估指南白皮书(LLM Eval)

近年来,大型语言模型(LLM)在自然语言处理领域取得了重大进展,例如 GPT-3 和 Chat-GPT。这些模型经过大型数据集的训练,在文本相关任务中表现出卓越的能力,甚至超越了人类。本文将简要介绍如何验证 LLMs 性能的评估指标。自然语言处理(NLP)是人工智能的一个领域,涉及计算机和人类语言之间的交互。NLP 的基本任务之一是语言建模 (LM),它涉及构建统计模型来分析和生成自然语言。LM 已成为推进机器语言智能的关键方法,使机器能够执行机器翻译、情感分析和对话系统等任务。

AI天才研究院 1013

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

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

leverli的专栏 1万+

GPFS扩展技术原理(十一)-FMDN广播与EID加解密

GFPS扩展技术原理(十一)FMDN广播及EID加解密

十多年蓝牙协议软件开发,擅长蓝牙协议分析 935

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

leverli的专栏 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android倚天剑之Notification之动感地带

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

leverli的专栏 9935

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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、付费专栏及课程。

余额充值