我有一个应用程序,我自己处理所有的触摸,而不是使用触摸和手势检测API,因为它是一个浮动窗口,是唯一有效的方法。
我做的一件事就是改变手指下视图的颜色。 OnTouch我检查哪个视图在手指下面,如果它与之前的I run不同:
myView.setBackgroundColor(getResources().getColor(R.color.white));
当我转到当前旁边的视图并且返回非常快时,它不起作用。
我已经用日志检查了它,找到的视图是正确的。我还检查了执行setBackgroundColor的行。
所以我不知道还能做什么。是否有任何setBackgroundColor不起作用的情况?如果onTouch花费太多时间执行还没有完成其任务吗?
有关如何解决此问题的任何线索?
修改 只有当我转到当前旁边的视图并快速返回时它才会失败。 我没有添加代码,因为我认为它比我所做的抽象更难阅读。我把它清理干净了。 如果您认为任何调用的方法都是相关的,我可以添加它们。 编辑2: 如果ACTION不是ACTION_DOWN或ACTION_UP则运行的代码。那些案件没有关系。
if ((isPortrait && isPortraitMeasured) || (!isPortrait && isLandscapeMeasured)) {
//Log.d("algor", "Here calculate where it is");
final int lastCol = currentColumn;
final int lastRow = currentRow;
findCell((int) event.getRawX(), (int) event.getRawY());
if ((lastCol == currentColumn && lastRow == currentRow)) {
if (isPortrait && currentRow==-1 || (!isPortrait && currentColumn==-1)
&& !wasPressed && currentTable!=mainTable) {
//is actionBar. Check if finger is over back icon, to go back
//Code not related to the problem...
}
} else {
int currentIndex = getAppsListIndex();
if (currentIndex >= 0) {
View nextApp;
if (isPortrait)
nextApp = cellsP.get(currentTable).get(currentIndex);
else
nextApp = cellsL.get(currentTable).get(currentIndex);
final Object tag = nextApp.getTag();
if (tag instanceof FolderData) {
//Code not related to the problem...
} else {
Log.d("fastf", "time to change color");
//nextApp.setBackgroundColor(getResources().getColor(R.color.white));
nextApp.setBackgroundColor(whiteColor);
//nextApp.setBackground(getResources().getDrawable(R.color.white));
/*final View app = nextApp;
app.post(new Runnable() {
@Override
public void run() {
app.setBackgroundColor(getResources().getColor(R.color.white));
}
});*/
}
} else {
//Code not related to the problem...
}
int lastIndex = getAppsIndexFromInts(lastRow, lastCol);
//lastCol != -2 is because otherwise, on opening the launcher it animates
// the last app launched
if (lastIndex >= 0 && lastCol != -2) {
View lastApp;
if (isPortrait)
lastApp = cellsP.get(currentTable).get(lastIndex);
else
lastApp = cellsL.get(currentTable).get(lastIndex);
ObjectAnimator animator = ObjectAnimator.ofInt(lastApp,
"backgroundColor", getResources().getColor(R.color.clear_gray),
getResources().getColor(R.color.white_overlay_transition));
animator.setDuration(500);
animator.setEvaluator(new ArgbEvaluator());
animator.start();
}
}
}
答案 0 :(得分:1)
你应该使用
nextApp.setBackgroundResource(...)而不是其他。
因为你的" R.color.white"是一种资源。
度过愉快的一天。
这是一个古老的问题,但我遇到了同样的问题,并通过这一改变得到了解决。
答案 1 :(得分:0)
试试吧
myView.setBackground(getResources()getDrawable(R.color.white));
答案 2 :(得分:0)
myView.setBackgroundColor(getResources().getColor(R.color.bgcolor));
color.xml
<color name="bgcolor">#ffffff</color>