假设我有一个StateListDrawable。我想在其中添加2个drawable:第一个如果被点击,第二个用于任何其他状态。
我尝试了如下(伪代码):
Drawable clickdDrawable = getResourses.getDrawable(R.drawable.presseddrawable);
clickDrawable.setBounds(-100, -100, 100, 100);
Drawable otherStateDrawable = getResources().getDrawable(R.drawable.somedrawable);
otherStateDrawable.setBounds(-50,-50, 50, 50);
StateListDrawable sld = new StateListDrawable();
sld.addState(new int[]{andriod.R.attr.state_pressed, android.R.attr.state_focussed}, clickDrawable);
sld.addState(StateSet.WILDCARD, otherStateDrawable);
sld.setBounds(-50, -50, 50, 50);
现在,如果我处于状态按下,我将得到可按抽屉,但它坚持StateListDrawable的界限。所以我的问题是:如何在StateListDrawable中存储具有不同边界的Drawables?这可能吗?
答案 0 :(得分:1)
你必须创建“自定义”Drawable
,但在你这样做之前,让我邀请你(以及任何参与的人,通常是设计师)重新思考你正在做的事情,几年前,我做了一个繁重的工作,以编程方式绘制extends Drawable
s(但它真棒)只是为了废弃它几个月后支持简单性和实用性,我不明白为什么你不能实现像这是一个精心制作的9补丁(又名n补丁)而不是硬编码尺寸,无论如何,在你打电话给我爷爷之前,这是一个快速的答案可能适用于你:
例如,你说你正在使用彩色绘图:
public class FixedBoundsColorDrawable extends ColorDrawable {
private boolean mFixedBoundsSet = false; // default
public FixedBoundsColorDrawable(int color) {
super(color);
}
@Override
public void setBounds(int left, int top, int right, int bottom) {
if (!mFixedBoundsSet) {
mFixedBoundsSet = true;
super.setBounds(left, top, right, bottom);
}
}
}
按下红色和蓝色作为通配符,你的价值就是Nexus 4:
你也可以创建一个包装器来包装任何drawable并调用它的方法,但我会这样做,因为你肯定需要一些final
方法。