Android imageview 改变色调来模拟按钮点击

2024-05-27

我有一个图像视图,我在其中设置了从网址获取的位图。 在 imageview 上,我设置了一个 onClickListener 来打开一个对话框。

当按下图像视图时,我想以某种方式改变色调(使其更暗),以提供一种类似按钮点击的感觉。

你有什么建议?


happydude 的答案是处理这个问题的最优雅的方法,但不幸的是(正如评论中指出的那样)ImageView 的源代码只接受整数(纯色)。解决这个问题已经有几年了,我在那里发布了一个解决方法,我将在这里总结一下:

扩展 ImageView 并使用根据新状态设置色调的代码包装 drawableStateChanged() :

TintableImageView.java

package com.example.widgets;

import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.support.v7.widget.AppCompatImageView;

import com.example.R;

public class TintableImageView extends AppCompatImageView {

    private ColorStateList tint;

    public TintableImageView(Context context) {
        super(context);
    }

    public TintableImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs, 0);
    }

    public TintableImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context, attrs, defStyle);
    }

    private void init(Context context, AttributeSet attrs, int defStyle) {
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TintableImageView, defStyle, 0);
        tint = a.getColorStateList(R.styleable.TintableImageView_tintColorStateList);
        a.recycle();
    }

    @Override
    protected void drawableStateChanged() {
        super.drawableStateChanged();
        if (tint != null && tint.isStateful())
            updateTintColor();
    }    

    private void updateTintColor() {
        int color = tint.getColorForState(getDrawableState(), 0);
        setColorFilter(color);
    }

}

定义自定义属性:

属性.xml

<?xml version="1.0" encoding="UTF-8"?>
<resources>

    <declare-styleable name="TintableImageView">
        <attr name="tintColorStateList" format="reference|color" />
    </declare-styleable>

</resources>

使用本地命名空间而不是 Android 的小部件和自定义属性:

示例布局.xml

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

    <com.example.widgets.TintableImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/example"
        android:clickable="true"
        app:tintColorStateList="@color/color_selector"/>

</LinearLayout>

然后你可以使用像 happydude 建议的颜色选择器:

颜色选择器.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/pressed_color"/>
    <item android:color="#00000000"/>
</selector>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android imageview 改变色调来模拟按钮点击 的相关文章

  • 如何清除所有WebView存储的信息?

    我有一个 Android 浏览器 我可以选择清除缓存 存储 cookie 等 代码如下所示 webView clearCache true webView clearFormData webView clearHistory webView
  • 如何对这个字符串进行子串化

    我想得到这个字符串的 4 个部分 String string 10 trillion 896 billion 45 million 56873 我需要的4个部分是 10万亿 8960亿 4500万 和 56873 我所做的是删除所有空格 然
  • 如何在 Android 中保存相机的临时照片?

    在尝试从相机拍照并将其保存到应用程序的缓存文件夹中时 我没有得到任何可见的结果 应用程序不会崩溃 但在 LogCat 上 当我尝试将 ImageView src 字段设置为刚刚获取的文件的 URI 时 我收到此消息 09 17 14 03
  • 如何快速自动发送FCM或APNS消息?

    我正在开发一项后端服务 通过 FCM 或 APNS 向移动应用程序发送推送通知 我想创建一个可以在一分钟内运行的自动化测试 并验证服务器是否可以成功发送通知 请注意 我不一定需要检查通知是否已送达 只需检查 FCM 或 APNS 是否已成功
  • 使用workmanager时Firestore脱机持久性错误

    我正在使用一个WorkManger定期从我的中检索信息Firestore当应用程序处于后台和前台时的数据库 此信息用于根据状态更新 UI 因此不同的状态会添加或删除 UI 的不同部分 第一次运行时效果很好 但是 一旦应用程序处于后台并且Wo
  • React Native 从 JavaScript 代码内部访问 strings.xml

    有没有办法访问当前值android app src main res values strings xml从 JavaScript 代码内部 我想为每个构建放置不同的端点 URL 但我什至无法检测到反应本机代码内的构建类型 而不必求助于 D
  • StrictMode 策略违规:我的应用程序中存在 android.os.strictmode.LeakedClosableViolation?

    Android 开发新手 第一次在我的应用程序上尝试 StrictMode 我注意到以下内容 并想知道这是否是我的应用程序或库中的问题 我不太清楚 谢谢你 D StrictMode StrictMode policy violation a
  • SearchView过滤ListView

    我已经实现了搜索视图来过滤我的列表视图项目 当我输入任何文本时 它会过滤列表 但当我退出搜索视图时 它不会返回原始列表项 public class PlacesListAdapter extends ArrayAdapter
  • android xamarin 中的 reCaptcha

    我想在 Xamarin android 应用程序中实现验证码 我抓住了这个在 Android 中集成 googles reCaptcha 验证 https www c sharpcorner com article how to integ
  • CollapsingToolBarLayout - 状态栏稀松布颜色不改变

    几天前我更新了我的 android studio 并开始使用 CoordinatorLayout 和 CollapsingToolbarLayout 只是尝试一些东西 工具栏稀松布颜色似乎覆盖了状态栏初始颜色和状态栏稀松布颜色 从 xml
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Android Studio 0.4.3 Eclipse项目没有gradle

    在此版本之前 在 Android Studio 中按原样打开 Eclipse 项目似乎很容易 无需任何转换 我更喜欢 Android Studio 环境 但我正在开发一个使用 eclipse 作为主要 IDE 的项目 我不想只为这个项目下载
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • Android Studio - Windows 7 上的 Android SDK 问题

    我对 Google i o 2013 上发布的最新开发工具 Android Studio 有疑问 我已经成功安装了该程序并且能够正常启动 我可以导入现有项目并对其进行编辑 但是 当我尝试单击 SDK 管理器图标或 AVD 管理器图标时 或者
  • Android向menuItem添加子菜单,addSubMenu()在哪里?

    我想根据我的参数以编程方式将 OptionsMenu 内的子菜单添加到 menuItem 中 我检查了android sdk中的 MenuItem 没有addSubMenu 方法 尽管你可以找到 hasSubMenu 和 getSubMen
  • .isProviderEnabled(LocationManager.NETWORK_PROVIDER) 在 Android 中始终为 true

    我不知道为什么 但我的变量isNetowrkEnabled总是返回 true 我的设备上是否启用互联网并不重要 这是我的GPSTracker class public class GPSTracker extends Service imp
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 解析包含 json 字符串的 json

    我有一个 json 里面有另一个 json 但它在双引号内 因此它给了我一个解析错误 除了使用之外还有什么方法可以解析这个jsongsub替换双引号 obj Name FirstName Douglas LastName Crockford
  • 如何检查安装了哪个版本的 Keras?

    问题与标题相同 我不想打开 Python 而是使用 MacOS 或 Ubuntu Python 库作者将版本号放入
  • Android 如何使用 facebook 3.0 sdk 点赞帖子

    我想在我的 Android 应用程序中实现 喜欢 选项 但我不知道要使用哪个请求 我打开了一个有效的 Facebook 会话以及我想要点赞的 ID 帖子 我该如何实现这个功能呢 Thanks 我找到了解决方案 为了喜欢帖子 我使用 face
  • dockerfile 没有创建目录并复制文件?

    我的 dockerfile 中有以下内容 还有很多 不过我把相关的部分贴在这里了 RUN useradd jenkins USER jenkins Maven settings RUN mkdir m2 COPY settings xml
  • 如何在 iOS 中将 NSData 变量转换为 NSInteger 变量

    我有以下返回的 api 方法NSData 我在另一个视图控制器中调用了这个方法 如何转换NSData to NS整数 NSData getBusXMLAtStop NSString stopnumber NSMutableURLReques
  • 如何直观理解C++优先级队列容器比较器中的大于/小于运算符

    我总是对为优先级队列容器定义比较器感到困惑 并且不知道如何理解它 例如 我有一个vector of pair
  • 向后兼容性和 Web 服务

    所以我对 Web 服务有点陌生 最近出现了一种情况 我们向返回给客户端的数据类型添加了一个元素 客户抱怨这破坏了他们的实施 因为它被意想不到的新元素所阻碍 我们通过 Axis2 提供服务 对我来说 这似乎是一个无害的更改 客户端应该能够优雅
  • 如何在 sqlSave() 命令中跳过主键?

    我正在尝试使用 RODBC 在 MySQL 数据库中插入 data frame 我正在使用的命令如下 sqlSave channel dbData tablename table name append TRUE safer TRUE fa
  • 保护基于prototype.js的XHR请求免受CSRF攻击

    Django 已经更新到 1 3 事实上从 1 2 5 开始 它就扩展了该方案 将跨站请求伪造保护令牌传递给 XMLHttpRequests Django 人员提供了帮助jQuery 的一个例子 http docs djangoprojec
  • Android Google 地图:隐藏整个地图的多边形或形状

    我试图隐藏除一个区域之外的整个地图 因为我使用的多边形在我想要显示的区域中有一个洞 问题在于 根据缩放的不同 空白区域会被多边形的颜色覆盖 或者多边形会失去其颜色 这是代码 polygon hide all world map float
  • 如何在 Flutter 中解码 Gzip Http 响应?

    我是颤振新手 我正在发出网络请求 并且得到了正确的响应 但数据已被压缩 我已经在 Swift 中解压了相同的内容 但是对于 Flutter 我无法做到这一点 有人可以帮忙吗 这是我尝试过的 import dart convert impor
  • Clojure 符号名称中的美元符号 ($)

    我一直在编写 clojure 解析器并遇到以下语法 defn key Returns the key of the map entry added 1 0 static true java util Map Entry e e getKey
  • git 工作目录中的更改拒绝恢复

    我的 git 工作目录中有五个文件git status显示为已修改 当我git diff他们 整个文件显示为已更改 我有core autocrlf true但似乎没有效果 当我试图从同事那里获取更改时 真正的问题出现了 修改 的文件之一会被
  • Material UI Drawer设置背景色

    如何简单设置Material UI的背景色Drawer 尝试过这个 但不起作用
  • 如何在 conda 中从一个文件安装多个包而不创建新环境?

    我从当前环境缺少的包的 yml 文件中获取了这些 我如何在当前环境中安装这些 channels defaults dependencies appdirs 1 4 3 py36h28b3542 0 asn1crypto 0 24 0 py3
  • Angular2如何更改禁用按钮的颜色

    我有这个按钮
  • 在 Xcode 4.2 中启用崩溃日志符号

    我使用的是 Xcode 4 2 我的崩溃日志没有被符号化 如何在 Xcode 4 2 中启用此功能 请浏览苹果的文档 http developer apple com library ios technotes tn2151 index h
  • 在android API 23中获取用户的位置

    我可以编写获取用户位置的代码 并且在 API 更多细节 我手动启用设备的 GPS 第一次运行应用程序请求权限并且没有日志返回 在下次运行应用程序时 返回我准备好的 Toast 检查您的提供商 这是我写的代码 public class Mai
  • Java中的运算符重载和覆盖

    运算符重载和运算符重写有什么区别 它们在继承和控制台程序中是否相同 Java 不支持运算符重载和重写 检查以下引用自的描述 http java sun com docs white langenv Simple doc2 html http
  • Android imageview 改变色调来模拟按钮点击

    我有一个图像视图 我在其中设置了从网址获取的位图 在 imageview 上 我设置了一个 onClickListener 来打开一个对话框 当按下图像视图时 我想以某种方式改变色调 使其更暗 以提供一种类似按钮点击的感觉 你有什么建议 h