我已经创建了自己的复合小部件,就像这样:
<LinearLayout>
<TextView />
<Button />
</LinearLayout>
我在ScrollView中放了15个。我希望它的行为类似于ListView(我不能直接使用ListView来执行此任务)。
我需要每个小部件在按下时突出显示。我已经让它工作了,但它太敏感了 - 只要我的手指碰到布局,它就会突出显示 - 我希望在突出显示之前有一个延迟,以便在真正的点击和仅仅是滚动手势之间辨别。 / p>
例如,在ListView中,当您拖动手指进行滚动时,除非您将手指放在行上一秒钟,否则行项目不会突出显示。
这就是我设置每个复合项目背景的方式:
private void setBg() {
ColorDrawable blr = new ColorDrawable(0xFFFFFFFF);
Drawable pressed = getContext().getResources().getDrawable(android.R.drawable.list_selector_background);
StateListDrawable bg = new StateListDrawable();
bg.addState(View.PRESSED_ENABLED_STATE_SET, pressed);
bg.addState(View.FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET, pressed);
bg.addState(View.PRESSED_ENABLED_FOCUSED_STATE_SET, pressed);
bg.addState(View.ENABLED_WINDOW_FOCUSED_STATE_SET, pressed);
bg.addState(View.ENABLED_STATE_SET, blr);
bg.addState(View.SELECTED_WINDOW_FOCUSED_STATE_SET, blr);
setBackgroundDrawable(bg);
}
所以我不确定我是否只是错误地设置了上述背景可绘制状态之一 - 或者ListView是否在内部对触摸延迟进行某种触摸处理?
由于
答案 0 :(得分:0)
尝试使用动画或过渡,在触摸时运行动画或转换开始,并在触摸启动或取消时停止或重置。延迟列表中的第一个框架/项目。
http://developer.android.com/guide/topics/graphics/2d-graphics.html#frame-animation
答案 1 :(得分:0)
Romain Guy在Google IO 2009上的演讲对我来说也很有帮助:
Make your Android UI Fast and Efficient(约90秒)
提到的ViewHolder技巧可以帮助提高性能。
此外,在从缓存加载图像时显示临时Drawable可以让您快速滚动,即使图像尚未加载,然后您可以使用动画(例如)从缓存返回时淡入图像。
这似乎是他们在Android Market等应用中采用的方法。