我正在尝试以编程方式制作具有不同渐变的按钮。我使用ShapeDrawable,它就像一个魅力。
RoundRectShape rs = new RoundRectShape(new float[] { 12f, 12f, 12f, 12f, 12f, 12f, 12f, 12f }, null, null);
ShapeDrawable sd = new ShapeDrawable(rs);
ShapeDrawable.ShaderFactory sf = new ShapeDrawable.ShaderFactory() {
@Override
public Shader resize(int width, int height) {
LinearGradient lg = new LinearGradient(0, 0, 0, height,
new int[] {
Color.parseColor("#feccb1"),
Color.parseColor("#f17432"),
Color.parseColor("#e86320"),
Color.parseColor("#f96e22") },
new float[] {
0, 0.50f, 0.50f, 1 },
Shader.TileMode.REPEAT);
return lg;
}
};
sd.setShaderFactory(sf);
myBtn.setBackgroundDrawable(sd);
但是我想在程序上为按钮添加阴影,而不是按钮文本。任何帮助将不胜感激。
答案 0 :(得分:8)
但是我想为按钮添加阴影,而不是按钮 文本编程。
我猜你想要建立你当前绘制的阴影。如果是,那么将LayerDrawable
与另一个Drawable
(放在第一位)一起作为影子:
RoundRectShape rss = new RoundRectShape(new float[] { 12f, 12f, 12f,
12f, 12f, 12f, 12f, 12f }, null, null);
ShapeDrawable sds = new ShapeDrawable(rss);
sds.setShaderFactory(new ShapeDrawable.ShaderFactory() {
@Override
public Shader resize(int width, int height) {
LinearGradient lg = new LinearGradient(0, 0, 0, height,
new int[] { Color.parseColor("#e5e5e5"),
Color.parseColor("#e5e5e5"),
Color.parseColor("#e5e5e5"),
Color.parseColor("#e5e5e5") }, new float[] { 0,
0.50f, 0.50f, 1 }, Shader.TileMode.REPEAT);
return lg;
}
});
LayerDrawable ld = new LayerDrawable(new Drawable[] { sds, sd });
ld.setLayerInset(0, 5, 5, 0, 0); // inset the shadow so it doesn't start right at the left/top
ld.setLayerInset(1, 0, 0, 5, 5); // inset the top drawable so we can leave a bit of space for the shadow to use
b.setBackgroundDrawable(ld);
答案 1 :(得分:0)
更简洁的方法是使用Paint.setShadowLayer
function applyClientFilters() {
var listView = $("#ProductsList").data("kendoListView");
var listViewDataSource = listView.dataSource;
// clear existing datasource
listViewDataSource.filter([]);
// extract selected items from each of the dropdown controls and the search box
var productType = $("#ProductTypeDropDown").data("kendoDropDownList").value();
var therapeuticClass = $("#TherapeuticClassDropDown").data("kendoDropDownList").value();
var searchString = $(".search-filter").val();
// setup filter object (using and logic)
var filter = {
logic: "and",
filters: [] // ready for filter from each of the dropdowns and search bar
};
// push new filter into array of filters with or logic on each filter
if (productType.length > 0) {
var productTypeFilter = {
logic: "or",
filters: [
{ field: "ProductTypeId", operator: "equals", value: productType }
]
};
filter.filters.push(productTypeFilter);
}
if (therapeuticClass.length > 0) {
var therapeuticClassFilter = {
logic: "or",
filters: [
{
field: "TherapeuticClasses",
operator: function (itemValue, value) {
return itemValue &&
itemValue.find(function (item) {
if (item.Name.toLowerCase().indexOf(value.toLowerCase()) !== -1) {
return true;
} else {
return false;
}
});
},
value: therapeuticClass
}
]
};
filter.filters.push(therapeuticClassFilter);
}
if (searchString.length > 0) {
var searchFilter = {
logic: "or",
filters: [
{ field: "Name", operator: "startswith", value: searchString },
{ field: "ProductTypeDisplay", operator: "startswith", value: searchString },
{ field: "NdcCode", operator: "startswith", value: searchString },
{
field: "TherapeuticClasses",
operator: function(itemValue, value) {
return itemValue &&
itemValue.find(function(item) {
// If a therapeutic class name matches search then return true
if (item.Name.toLowerCase().indexOf(value.toLowerCase()) !== -1) {
return true;
} else {
return false;
}
});
},
value: searchString
}
]
};
filter.filters.push(searchFilter);
}
// apply filter query to datasource
listViewDataSource.query({
filter: filter
});
}