Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android图像按钮,带有一组彩色动态绘图功能_Android_Textures_Android Drawable_Android Imagebutton - Fatal编程技术网

Android图像按钮,带有一组彩色动态绘图功能

Android图像按钮,带有一组彩色动态绘图功能,android,textures,android-drawable,android-imagebutton,Android,Textures,Android Drawable,Android Imagebutton,我有一个非常复杂的按钮,我想创建,但现在当我面对它的更多技术方面,我不知道如何创建它 我有一个带有自定义纹理(android:background)的ImageButton,上面还有一个自定义图像(android:src)。然而,这是我想要的基本按钮,我心目中的成品有3个额外的颜色动态绘图。基本上,每次按下按钮时,不同的可拉丝将“点亮”,就像电子设备上的LED一样 这就是我遇到的障碍,因为就我所知,我不能同时向一个按钮添加多个绘图项(并分别修改它们)。另一个选项是创建4种不同的纹理(切换灯光效果

我有一个非常复杂的按钮,我想创建,但现在当我面对它的更多技术方面,我不知道如何创建它

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

这就是我遇到的障碍,因为就我所知,我不能同时向一个按钮添加多个绘图项(并分别修改它们)。另一个选项是创建4种不同的纹理(切换灯光效果),并在按下按钮后切换背景图像,但这是最不有效的方法。更不用说这样做很可能会带来和可绘制内容重叠的问题。当不同的屏幕尺寸改变按钮尺寸时,可绘制内容的高度可能与所讨论的“LED”重叠

我不相信你能把线性布局嵌套在一个按钮里,但这正是我的想法。否则,我听到有人说要把一个线性布局变成一个按钮,然后把这个按钮小部件一起扔掉。与上述潜在解决方案相比,这是否值得额外的工作

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

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

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

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

档案:

  • 图像_led_1.jpg
  • 图像_led_2.jpg
  • 图像_led_3.jpg
  • 图像_led_0.jpg//关闭
  • 按钮_img.jpg
XML布局(示例按钮):


听众:

    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);
        }
    };
private View.OnClickListener ledButtonListener=new View.OnClickListener(){
@凌驾
公共void onClick(视图){
int position=(int)view.getTag();//获取RecyclerView中的位置
MyClass foo=fooArray.get(位置);
foo.a=(foo.a<3)?foo.a+1:0;
int resourceID=getContext().getResources().getIdentifier(
“led_按钮_”+整数toString(foo.a),
“可提取”,
getActivity().getPackageName());
view.setBackgroundResource(resourceID);
activity.MyAppEngine.updateFoarray(位置,foo.a);
}
};
此侦听器连接到适配器类中RecyclerView中的每个按钮

试试这个:


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

这并不能真正解决我的问题。问题在于找到一种更有效的方法来创建按钮,因为我基本上有5个不同的图像需要点击按钮。有问题的LED当前设计在按钮的背景中,我将最后一幅图像作为
ImageButton
的src,我将用我当前的实现更新我的问题
Drawable unwrappedDrawable = AppCompatResources.getDrawable(context, R.drawable.my_drawable); 
Drawable wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
DrawableCompat.setTint(wrappedDrawable, Color.RED);