Android图库查看setCallback在Fling期间导致口吃

时间:2011-05-04 06:35:55

标签: android

我尝试使用setCallbackDuringFling在Gallery fling期间更新某些指示器,不知何故,每当我将其设置为(true)时,它都会断断续续。当我说“口吃”时,我的意思是下一个图像跳跃/捕捉进入视野,因此在投掷过程中视觉非常跳跃。即使我拖得很慢,下一张图片也会显示出来,然后当它向中间移动时,它就会卡入到位。

但是,如果我将其设置为false(因此onItemSelected仍然会被调用但在fling停止时只调用一次),滚动/拖动非常平滑。

我的onItemSelected(见下面的代码)根本不是密集的,因此我怀疑口吃是由场景背后的东西引起的。

有什么想法解决这个问题?

提前致谢。

// Set up Gallery listeners
myGallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

    // When scrolling stops, set the indicators
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        ImageView myIV;

        // First reset myCurrentDot
        myIV = (ImageView) findViewById (myDotID[myCurrentDot]);
        myIV.setImageResource(R.drawable.grey);
        // The set the "position" dot to red
        myIV = (ImageView) findViewById (myDotID[position]);
        myIV.setImageResource(R.drawable.red);
        // update myCurrentDot
        myCurrentRedDot = position;
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub
    }
}); // End Gallery Listener

1 个答案:

答案 0 :(得分:0)

使用setCallbackDuringFling()调用true时,每次选择某个项目时,onItemSelected实例都会调用AdapterView.OnItemSelectedListener

查看代码,我们可以看到findViewById()被调用两次。也许找到视图是一个太沉重的过程。也许,您可以使用视图缓存机制,而不是每次都搜索视图。只需用视图缓存(myDotID)替换布局ID缓存(ImageView[] myDotViews)。