我的Activity上有一个View对象,我想更改视图的后台资源。更具体地说,我想切换它。
所以我需要这样的逻辑:
if (myView.getBackgroundResource() == R.drawable.first) {
myView.setBackgroundResource(R.drawable.second);
}
else {
myView.setBackgroundResource(R.drawable.first);
}
这里的问题是没有getBackgroundResource()方法。
如何获取View用于其背景的资源?
答案 0 :(得分:0)
仅仅拥有一个维持状态的控制变量会不会更容易?让您灵活,并允许您任意数量的drawables。
int[] backgrounds = {
R.drawable.first,
R.drawable.second,
R.drawable.third
};
int currentBg;
void switch() {
currentBg++;
currentBg %= backgrounds.length;
myView.setBackgroundResource(backgrounds[currentBg]);
}
答案 1 :(得分:0)
您可以使用标记来跟踪最后设置的内容
private static final int FIRST_BG = 0;
private static final int SECOND_BG = 1;
private int mCurrentBg;
...
if (mCurrentBg == FIRST_BG) {
myView.setBackgroundResource(R.drawable.second);
mCurrentBg = SECOND_BG;
}
else {
myView.setBackgroundResource(R.drawable.first);
mCurrentBg = FIRST_BG;
}
您必须在最初设置背景的地方初始化mCurrentBg
。
答案 2 :(得分:0)
我不认为View会记住从资源获取Drawable后它使用的资源。
为什么不在Activity中使用实例变量,或者为View 创建子类并向其添加实例变量?
答案 3 :(得分:0)
您可以通过getResources().getIdentifier("filename", "drawable", "com.example.android.project");
功能获取资源的ID。如您所见,您将需要文件名,资源类型(可绘制,布局或其他)以及它所在的包。
答案 4 :(得分:0)
编辑:更新了我的逻辑失败。
我认为您可以在此处使用setTag()
和getTag()
方法:
//set the background and tag initially
View v = (View)findViewById(R.id.view);
v.setBackgroundResource(R.drawable.first);
v.setTag(R.drawable.first);
if(v.getTag().equals(R.drawable.first)) {
v.setBackgroundResource(R.drawable.second);
v.setTag(R.drawable.second);
} else {
v.setBackgroundResource(R.drawable.first);
v.setTag(R.drawable.first);
}
我没有对此进行过测试,但我认为理论上应该可行。缺点是你必须在第一次手动标记它时增加一点开销,但在初始标记之后,你不必担心跟踪标记。