【问题标题】:Change background of a custom view when touched触摸时更改自定义视图的背景
【发布时间】:2023-03-23 08:38:01
【问题描述】:

我想在 customView 被按下时更改它的背景颜色,并在视图失去“按下状态”时稍微“移除”这个背景颜色。但是,我用谷歌搜索了这个问题并找到了使用 StateListDrawable 的解决方案。我已经在我的 customView 中尝试过这个(它以编程方式添加到 ListView 中),但是我的视图只设置了“正常颜色”。当我触摸视图时,没有任何反应。怎么了?

选择器 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:state_pressed="true" 
        android:drawable="@color/bckgr" />
    <item 
        android:drawable="@color/transparent" />
</selector>

在我的自定义视图的构造函数中:

this.setBackgroundResource(R.drawable.list_item_bckgr);

【问题讨论】:

    标签: android view


    【解决方案1】:

    您必须将您的background 应用到ViewAdapter 填满(您的getView 实现正在返回的视图)而不是ListView self

    【讨论】:

      【解决方案2】:

      尝试在ListView 上将android:descendantFocusability 设置为true。

      【讨论】:

        【解决方案3】:

        嘿,您是否让视图可聚焦和可点击,在构造函数中使用:

        setClickable(true);
        setFocusable(true);
        

        可能是您的视图没有获得焦点。

        【讨论】:

          【解决方案4】:

          您需要设置OnTouchListener 来处理触摸事件。触摸视图时,更改背景,当视图“未触摸”时,将背景更改回原来的。

          要设置侦听器,请使用您创建的 OnTouchListener 调用自定义视图的 View.setOnTouchListener() 函数来处理这些事件。

          这里是对 OnTouchListener 的引用:

          http://developer.android.com/reference/android/view/View.OnTouchListener.html

          【讨论】:

            【解决方案5】:

            我想你有一个覆盖 OnTouch() 方法的方法,我要做的是创建一个 instance variable(类 var)来保存你想要作为背景的图像,并将其设置为你的OnTouch() 方法。然后,覆盖您的OnDraw() 方法,该方法将为您提供对canvas 的引用,并使用canvas.DrawBitmap() 绘制您的背景。

            此答案向您展示了有关如何绘制 bitmap 的更多详细信息 Setting background image in a custom view

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-05-28
              • 1970-01-01
              • 1970-01-01
              • 2021-11-18
              • 2011-06-09
              • 1970-01-01
              • 2010-11-09
              相关资源
              最近更新 更多