- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我目前正在开发的应用程序使用很多 ImageViews 作为按钮。这些按钮上的图形使用 Alpha channel 淡出按钮的边缘,使它们看起来不规则。目前,我们必须为每个按钮生成 2 个图形(1 个用于选中/聚焦/按下状态,另一个用于默认未选中状态)并为每个按钮使用 XML 文件中定义的 StateListDrawable。
虽然这工作得很好,但似乎非常浪费,因为所有选定的图形都是未选定按钮的简单着色版本。这些需要时间来生成(尽管很少)并在最终 APK 中占用空间。似乎应该有一种简单的自动方法。
看起来,完美的解决方案是为每个按钮使用 ImageViews,并在其 tint 属性中指定一个 ColorStateList。这种方法的优点是所有按钮(共享相同的色调)只需要一个 XML ColorStateList。但是它不起作用。如前所述here ,当提供给 tint 的值不是单一颜色时,ImageView 会抛出 NumberFormatException。
我的下一个尝试是对选定的可绘制对象使用 LayerDrawable。在图层列表中,我们将在堆栈底部的原始图像被一个半透明的矩形覆盖。这适用于按钮图形的实体部分。然而,本应完全透明的边缘现在与顶层颜色相同。
以前有没有人遇到过这个问题并找到了合理的解决方案?我想坚持使用 XML 方法,但可能会编写一个简单的 ImageView 子类,该子类将在代码中进行所需的着色。
最佳答案
对于那些遇到类似需求的人,用代码解决这个问题是相当干净的。这是一个示例:
public class TintableButton extends ImageView {
private boolean mIsSelected;
public TintableButton(Context context) {
super(context);
init();
}
public TintableButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public TintableButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
mIsSelected = false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN && !mIsSelected) {
setColorFilter(0x99000000);
mIsSelected = true;
} else if (event.getAction() == MotionEvent.ACTION_UP && mIsSelected) {
setColorFilter(Color.TRANSPARENT);
mIsSelected = false;
}
return super.onTouchEvent(event);
}
}
它尚未完成,但作为概念证明效果很好。
关于android - 触摸时可绘制的色调/暗淡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8034494/
我目前正在开发的应用程序使用很多 ImageViews 作为按钮。这些按钮上的图形使用 Alpha channel 淡出按钮的边缘,使它们看起来不规则。目前,我们必须为每个按钮生成 2 个图形(1 个
我正在尝试将 3 dim numpy 数组减少为 2 dim 数组,但除了将其放入 for 循环之外想不出其他方法,这会花费太多时间。下面是我的代码片段。 train_dataset 是一个 3 维形
当我的 ListView 中的一个项目被点击时,我会在一个对话框中弹出几个选项供用户选择。但是,在不同的情况下,我想禁用一个或多个选项,以便用户无法选择它们。这是一些代码。 public class
是否可以在不使用 strlen、使用递归和这个定义的情况下就地反转字符串? void reverse(char *s, int dim); 我唯一能做的就是: void reverse(char *s
所以我试图实现 (a * b) * (M * a.T) 但我不断收到 ValueError 。由于我是 python 和 numpy 函数的新手,因此帮助会很棒。提前致谢。 import numpy.
我正在做机器学习作业,并且正在制作逻辑回归下降梯度和逻辑回归成本。我的功能是这样的: def calcLogRegressionCost(X, y, theta): #X is the fea
def cal_cost(theta,X,y): m = len(y) predictions = X.dot(theta) cost = (1/2*m) * np.s
我有 2 个 numpy 数组: x= np.linspace(1,10,100) + np.random.randn(n)/5 y = np.sin(x)+x/6 + np.random.randn
我是一名优秀的程序员,十分优秀!