我有一个包含300个单元格的日历的tablelayout。当用户触摸流/移动触摸e.x中的日期时。 6天,它设置了背景可绘制。
drawable使用XML(shape,rect,...)设置。它只在这6天内迭代,而不是在所有细胞上迭代。
问题是,在Nexus 7和旧设备上设置backgroundDrawable会消耗太多时间。当手指在第6天时,它设定第4天直到它也到达最后一天!!!
我该如何改进?
Flow:onDown(...),onMove(...)超过6天,onUp(...)。
编辑:
public boolean onMove(MotionEvent e) {
Day selectedDay = searchForSelectedDay((int) e.getX(), (int) (e.getY() + getScrollY()));
if (selectedDay != null && selectedDay != mPreviousDay){
defineDayContent(mPreviousDay, selectedDay);
}
...
defineDayContent(Day arg0, Day arg1){
//iterates from arg0 till arg1 and sets the background
for(Day d : (iterate from arg0 till arg1)){
d.setBackground(Calendar.BACKGROUND_DRAWABLE);
}
}
答案 0 :(得分:0)
您没有提供任何代码,这就是为什么很难说出瓶颈究竟在哪里。我会尝试以下措施。
作为第一项措施,我会预先加载drawable,以确保我不会在getDrawable()
方法中调用setBackgroundResource()
或onTouch()
。
其次,如果已经设置了背景,我会确保我不会在setBackground()
中为onTouch()
拨打两次或多次视图。
如果前两个人没有帮助,只有在用户将手指放在特定视图上后,我才会致电setBackground()
。这样可以避免您描述的视觉效果并加快更新速度。
答案 1 :(得分:0)
这没有解决,但是......
我们尝试夸大视图并设置图像视图的可见性。非常快,但300个细胞的xmls膨胀很重......初始化时间为2-3秒。
我们决定绘制细胞的内容。布局+性能非常快。
最后的解决方案:CustomView + onDraw
yayyy