要做一个类似这样的组合按钮。

点击的时候 改变背景颜色,改变图标颜色,改变字体颜色。

看起来很容易嘛。一个垂直的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相关推荐

  1. Android点击效果

    我们在开发网站时,会发现当我们添加<a/>标签后,标签有一个点击效果,比如颜色变化,这样开看起来用户体验会很棒,那么在我们的Android开发中如何加入这样的效果呢?本篇就为大家揭开它的神 ...

  2. 代码android点击效果,GitHub - likaiyuan559/TouchEffects: Android View点击特效TouchEffects,几行代码为所有控件添加点击效果...

    Android 点击特效TouchEffects TouchEffects能够帮助你更快速方便的增加点击时候的效果,TouchEffects的目标是打造一个稳定.全面.且能更方便的自定义及个性化的一款 ...

  3. android checkBox背景样式及用颜色值实现button点击效果

    1  使用颜色值(不使用图片)来实现按钮的点击效果: color.xml  <color name="head_color">#836FFF</color> ...

  4. 用shape结合selector实现点击效果

    <span style="font-family:Arial, Helvetica, sans-serif;font-size:18px;background-color: rgb(2 ...

  5. Android ViewGroup点击效果(背景色)

    在开发Android应用的界面时,我们必然会用到本文ViewGroup,尤其是FrameLayout,LinearLayout,RelativeLayout等ViewGroup的子类: 在一些情况下, ...

  6. Android之给ImageView添加点击效果

    1 问题 给ImageView添加点击效果 2 解决办法 1).新建selector.xml文件 <?xml version="1.0" encoding="utf ...

  7. android求助:关于播放器中的“播放/暂停”键: 用ImageButton来设置点击效果时的问题...

    ============问题描述============ 大家好,我最近遇到个问题:    大家都知道,播放器中的播放/暂停键是这样的逻辑:当用户点击了这个键,如果当前显示的是"播放&quo ...

  8. Android中妙用Selector实现颜色图片切换效果

    在目前的安卓开发中,很多情况下,都会涉及到颜色变化,比如应用程序中下方的按钮,当我们点击按钮的时候,希望更换图片或者是按钮中的颜色发生变化,这种颜色的改变使得用户能够更加清晰的看到所处的"功 ...

  9. Android点击水波纹扩散效果整理(附带一个自定义的水波纹效果控件)

    很久很久没有写博客了,说来也有点惭愧.正好最近整理自己的项目工程目录,看到一些值得分享的控件,准备在之后的几篇博客中准备把它们陆续搬运上来. 这篇博客准备整理一下Android Material De ...

最新文章

  1. go语言的channel特性
  2. 前端教程分享:十行代码实现title滚动显示
  3. Browser Page Parsing Details
  4. 程序员修神之路--缓存架构不够好,系统容易瘫痪
  5. 车载电脑中控软件_数字图书馆智能化系统集成-ipad中控软件
  6. Oracle数据库(三)
  7. 背景提取算法——帧间差分法、背景差分法、ViBe算法、ViBe+算法
  8. php极差平级,平行志愿有级差吗志愿极差是什么
  9. 中文信息处理——分词评价程序(计算分词结果的准确率,召回率,F测度)
  10. Stanford机器学习---第八讲. 支持向量机SVM
  11. 现在电脑的主流配置_主流级玩家 应该如何配置高性价比电脑
  12. WayOs内置智能重启:自动计算UTC时间为本地时间,可以调整为几时重启
  13. http协议中的1xx,2xx,3xx,4xx,5xx状态码分别表示什么?列举常见错误码及含义
  14. 波浪谱 matlab画,matlab窄带随机过程
  15. 用Javascript实现回到顶部效果
  16. Ubuntu测试使用速腾RS-Lidar-16
  17. 现要求输入一个整数n,请输出斐波那契数列的第n项
  18. 疲惫!很疲惫(发发牢骚)
  19. ImageCombiner图片合成工具
  20. 【项目】工艺品展示系统——数据库设计

热门文章

  1. uniapp 微信小程序 多人语音
  2. 用电脑浏览器模拟手机浏览器
  3. macbook install php zend opcache,Zend Opcache 安装配置
  4. 老前辈分享:使用python-opencv读取视频,计算视频总帧数及FPS的实现
  5. 探索非洲专线物流的新时代_国际物流供应链管理平台_箱讯科技
  6. bson java_使用Gobson / Mgo解组BSON数据
  7. C++ OpenCV绘制对称圆点标定图案
  8. js前端实现批量分页打印二维码标签
  9. 考研复试英语万金油回答
  10. ChatGPT 火爆的原因