android点击效果selector
要做一个类似这样的组合按钮。
点击的时候 改变背景颜色,改变图标颜色,改变字体颜色。
看起来很容易嘛。一个垂直的LinearLayout + Imageview + Textview+几个点击的selector就搞定了。
xml代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.textpro.MainActivity" ><LinearLayoutandroid:id="@+id/ll_static"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/ll_bg"android:gravity="center"android:clickable="true"android:orientation="vertical" ><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:background="@drawable/img_drawable" /><TextViewandroid:id="@+id/tv_static"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"android:padding="2dp"android:text="xxx统计"android:textColor="@color/white"android:textSize="14sp" /></LinearLayout></RelativeLayout>
背景图片的ll_bg.xml 与 img_drawable.xml
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="false" android:drawable="@drawable/bg_normal" /> <item android:state_pressed="true" android:drawable="@drawable/bg_pressed" />
</selector>
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="false" android:drawable="@drawable/img_normal" /> <item android:state_pressed="true" android:drawable="@drawable/img_pressed" />
</selector>
接着处理TextView的按下变色事件。设置linearLayout的onTouch事件就ok了。
public class MainActivity extends Activity {private TextView tvStatic;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);View mView = this.findViewById(R.id.ll_static);tvStatic = (TextView)this.findViewById(R.id.tv_static);mView.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View view, MotionEvent motionEvent) {int action = motionEvent.getAction();switch (action) {case MotionEvent.ACTION_DOWN:tvStatic.setTextColor(getResources().getColor(R.color.purple));Log.e("ACTION_DOWN", "ACTION_DOWN");break;case MotionEvent.ACTION_MOVE:tvStatic.setTextColor(getResources().getColor(R.color.purple));Log.e("ACTION_MOVE", "ACTION_MOVE");break;case MotionEvent.ACTION_UP:tvStatic.setTextColor(getResources().getColor(R.color.white));Log.e("ACTION_UP", "ACTION_UP");break;default:break;}return false;//返回false 不会屏蔽掉xml中的背景改变事件}});}
}
运行起来,点击基本效果都出来了。但是光有点击效果肯定不行,还得有点击事件。这里模拟一个耗时事件。
mView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});
运行代码。
可以很明显的看出,字体颜色的改变与上面的背景改变不同步了。
通过打印log发现,onTouch事件在onClick事件之前运行。也就是说,当程序运行到click事件的时候,字体的颜色转变已经结束了,而背景图片与图标的转变仍然在运行中。那么如何保证 3个背景颜色转变的一致性呢?解决方法通过查资料也找到一些。
1. onClick事件中耗时操作在线程中运行。
2. TextView的点击变色操作不在OnTouch事件中编写,通过color的selector处理。具体操作: 在res下新建color文件夹,新建tv_color.xml
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="false" android:color="@color/white" /> <item android:state_pressed="true" android:color="@color/purple" />
</selector>
android点击效果selector相关推荐
- Android点击效果
我们在开发网站时,会发现当我们添加<a/>标签后,标签有一个点击效果,比如颜色变化,这样开看起来用户体验会很棒,那么在我们的Android开发中如何加入这样的效果呢?本篇就为大家揭开它的神 ...
- 代码android点击效果,GitHub - likaiyuan559/TouchEffects: Android View点击特效TouchEffects,几行代码为所有控件添加点击效果...
Android 点击特效TouchEffects TouchEffects能够帮助你更快速方便的增加点击时候的效果,TouchEffects的目标是打造一个稳定.全面.且能更方便的自定义及个性化的一款 ...
- android checkBox背景样式及用颜色值实现button点击效果
1 使用颜色值(不使用图片)来实现按钮的点击效果: color.xml <color name="head_color">#836FFF</color> ...
- 用shape结合selector实现点击效果
<span style="font-family:Arial, Helvetica, sans-serif;font-size:18px;background-color: rgb(2 ...
- Android ViewGroup点击效果(背景色)
在开发Android应用的界面时,我们必然会用到本文ViewGroup,尤其是FrameLayout,LinearLayout,RelativeLayout等ViewGroup的子类: 在一些情况下, ...
- Android之给ImageView添加点击效果
1 问题 给ImageView添加点击效果 2 解决办法 1).新建selector.xml文件 <?xml version="1.0" encoding="utf ...
- android求助:关于播放器中的“播放/暂停”键: 用ImageButton来设置点击效果时的问题...
============问题描述============ 大家好,我最近遇到个问题: 大家都知道,播放器中的播放/暂停键是这样的逻辑:当用户点击了这个键,如果当前显示的是"播放&quo ...
- Android中妙用Selector实现颜色图片切换效果
在目前的安卓开发中,很多情况下,都会涉及到颜色变化,比如应用程序中下方的按钮,当我们点击按钮的时候,希望更换图片或者是按钮中的颜色发生变化,这种颜色的改变使得用户能够更加清晰的看到所处的"功 ...
- Android点击水波纹扩散效果整理(附带一个自定义的水波纹效果控件)
很久很久没有写博客了,说来也有点惭愧.正好最近整理自己的项目工程目录,看到一些值得分享的控件,准备在之后的几篇博客中准备把它们陆续搬运上来. 这篇博客准备整理一下Android Material De ...
最新文章
- go语言的channel特性
- 前端教程分享:十行代码实现title滚动显示
- Browser Page Parsing Details
- 程序员修神之路--缓存架构不够好,系统容易瘫痪
- 车载电脑中控软件_数字图书馆智能化系统集成-ipad中控软件
- Oracle数据库(三)
- 背景提取算法——帧间差分法、背景差分法、ViBe算法、ViBe+算法
- php极差平级,平行志愿有级差吗志愿极差是什么
- 中文信息处理——分词评价程序(计算分词结果的准确率,召回率,F测度)
- Stanford机器学习---第八讲. 支持向量机SVM
- 现在电脑的主流配置_主流级玩家 应该如何配置高性价比电脑
- WayOs内置智能重启:自动计算UTC时间为本地时间,可以调整为几时重启
- http协议中的1xx,2xx,3xx,4xx,5xx状态码分别表示什么?列举常见错误码及含义
- 波浪谱 matlab画,matlab窄带随机过程
- 用Javascript实现回到顶部效果
- Ubuntu测试使用速腾RS-Lidar-16
- 现要求输入一个整数n,请输出斐波那契数列的第n项
- 疲惫!很疲惫(发发牢骚)
- ImageCombiner图片合成工具
- 【项目】工艺品展示系统——数据库设计