【问题标题】:Android Image Button with a set of color-dynamic drawables带有一组颜色动态可绘制对象的 Android 图像按钮
【发布时间】:2020-02-23 10:23:41
【问题描述】:

我想创建一个非常复杂的按钮,但现在当我遇到它的更多技术方面时,我不确定如何创建它。

我有一个带有自定义纹理 (android:background) 的 ImageButton,上面还有一个自定义图像 (android:src)。然而,这是我想要的基本按钮,我想到的成品有 3 个额外的颜色动态绘图。本质上,每次按下按钮时,都会“点亮”不同的可绘制对象,就像电子设备上的 LED 一样。

这是我遇到障碍的地方,因为据我所知,我不能同时向一个按钮添加多个可绘制对象(并单独修改它们)。另一种选择是创建 4 种不同的纹理(切换灯光效果),并在按下按钮后切换背景图像,但这是效率最低的方法。更不用说这样做很可能会导致与可绘制内容重叠的问题。由于不同的屏幕尺寸会改变按钮的尺寸,可绘制内容的高度可能会与相关的“LED”重叠。

我不相信您可以将 LinearLayout 嵌套在按钮内,但这就是我的想法。否则,我听到有人谈论将线性布局制作成按钮,然后将 Button 小部件全部丢弃。与上述潜在解决方案相比,这是否值得额外的工作?

实际上,就在我写这篇文章的时候,我可以在按钮上方或下方的单独线性布局中包含可绘制对象,但我担心这将如何影响设计。我喜欢它在按钮内部,因为它在空间使用上更有效。

否则任何其他想法将不胜感激。

更新: 我已经开始实现一个版本,它使用我切换的不同背景。到目前为止,前端计算的数量(对于侦听器、更改模型信息和更改背景)似乎混淆了我的其他进程。我仍然很好奇这是否是最好的方法,或者我可能需要开始在不同的线程上进行一些计算以节省空间。

更新 #2 以下是一些实现细节供参考:

文件:

  • image_led_1.jpg
  • image_led_2.jpg
  • image_led_3.jpg
  • image_led_0.jpg //关闭
  • button_img.jpg

XML 布局(示例按钮):

    <ImageButton
            android:id="@+id/ledButton1"
            android:background="@drawable/image_led_1"
            android:layout_width="0dp"
            android:layout_marginLeft="4dp"
            android:layout_marginRight="4dp"
            android:scaleType="fitCenter"
            android:src="@drawable/contentImage"
            app:layout_column="0"
            app:layout_columnWeight="2"
            app:layout_row="0" />

听众:

    private View.OnClickListener ledButtonListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int position = (int) view.getTag();  // Get position in RecyclerView
            MyClass foo = fooArray.get(position);

            foo.a = (foo.a < 3) ? foo.a + 1 : 0;
            int resourceID = getContext().getResources().getIdentifier(
                    "led_Button_" + Integer.toString(foo.a),
                    "drawable",
                    getActivity().getPackageName());
            view.setBackgroundResource(resourceID);
            activity.MyAppEngine.updateFooArray(position, foo.a);
        }
    };

此侦听器附加到 Adapter 类中 RecyclerView 中的每个按钮

【问题讨论】:

    标签: android textures android-drawable android-imagebutton


    【解决方案1】:

    试试这个:

    Drawable unwrappedDrawable = AppCompatResources.getDrawable(context, R.drawable.my_drawable); 
    Drawable wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
    DrawableCompat.setTint(wrappedDrawable, Color.RED); 
    

    使用DrawableCompat 很重要,因为它在 API 22 和更早版本的设备上提供向后兼容性和错误修复

    【讨论】:

    • 这并不能真正回答我的情况。问题更多的是找到一种有效的方法来创建按钮,因为我基本上有 5 个不同的图像需要在按钮上拍打。有问题的 LED 当前设计在按钮的背景中,我将最后一张图像作为 ImageButton 的 src 我将用我当前的实现更新我的问题
    猜你喜欢
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 2015-09-05
    • 2012-07-07
    相关资源
    最近更新 更多