Android setBackground(Drawable)消耗太多时间

时间:2014-04-12 07:01:40

标签: android caching view bitmap drawable

我有一个包含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);
    }
    }

2 个答案:

答案 0 :(得分:0)

您没有提供任何代码,这就是为什么很难说出瓶颈究竟在哪里。我会尝试以下措施。

作为第一项措施,我会预先加载drawable,以确保我不会在getDrawable()方法中调用setBackgroundResource()onTouch()

其次,如果已经设置了背景,我会确保我不会在setBackground()中为onTouch()拨打两次或多次视图。

如果前两个人没有帮助,只有在用户将手指放在特定视图上后,我才会致电setBackground()。这样可以避免您描述的视觉效果并加快更新速度。

答案 1 :(得分:0)

这没有解决,但是......

我们尝试夸大视图并设置图像视图的可见性。非常快,但300个细胞的xmls膨胀很重......初始化时间为2-3秒。

我们决定绘制细胞的内容。布局+性能非常快。

最后的解决方案:CustomView + onDraw

yayyy