我通过调用offsetTopandBottom(int distanceY)来抵消Action_MOVE上的imageview,并且在每次调用后也会失效。
但是框架是可见的,同时在Froyo和Gingerbread上拖动视图。有什么建议吗?
/**
* Called on ACTION_MOVE
**/
private void offsetView(View view, int distanceY) {
view.offsetTopAndBottom(distanceY);
view.invalidate();
view.invalidateDrawable(view.getBackground());
}
我也试过在每个offsetCall上发帖,但它没有用。
post(new Runnable() {
@Override
public void run() {
view.offsetTopAndBottom(distanceY);
view.invalidateDrawable(getBackground());
view.invalidate();
}
});
我应该使用postDelayed进行重绘,还是应该延迟调用offsetTopAndBottom(int offset)?
解决:
分开执行绘图和偏移调用10ms(或其他时间<60ms)。
view.offsetTopAndBottom(distanceY);
postDelayed(new Runnable() {
@Override
public void run() {
view.invalidateDrawable(getBackground());
view.invalidate();
}
}, 10);
谢谢格雷格:)
答案 0 :(得分:2)
默认情况下,Android 3.1之前未启用硬件加速。
将android:hardwareAccelerated="true"
添加到您的清单中,用于活动或应用程序。
更新:如果这不起作用,我认为Android延迟重绘,直到你的UI线程空闲,但在你的情况下它不会因为你经常处理触摸事件而闲置。因此,您应该尝试发布到处理程序而不是立即绘制,以便为操作系统提供重绘的机会。
试试这个:
Handler h = new Handler();
private void offsetView(View view, int distanceY) {
h.post(new Runnable() {
@Override
public void run() {
view.offsetTopAndBottom(distanceY);
view.invalidate();
view.invalidateDrawable(view.getBackground());
}
});
}