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
听众:
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);