2014-01-06 31 views
0

我抵消上ACTION_MOVE的ImageView的,通过调用offsetTopandBottom(INT distanceY)和每次调用后也无效。拖动视图显示差事行为

但框架是可见的,而拖延升级Froyo和姜饼的看法。任何建议?

/** 
* 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偏移)?

解决:

执行绘图和分别为10ms(或一些其它时间< 60ms的)隔开偏移呼叫。

view.offsetTopAndBottom(distanceY); 
postDelayed(new Runnable() { 
    @Override 
    public void run() { 
    view.invalidateDrawable(getBackground()); 
    view.invalidate(); 
    } 
}, 10); 

感谢格雷格:)

enter image description here

回答

2

硬件加速不是由之前默认启用到Android 3.1。

添加android:hardwareAccelerated="true"到您的清单,无论是对于活动或应用程序。


UPDATE:如果不工作,我认为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()); 
     } 
    }); 
} 
+0

上面的问题只发生在 = API 11,使用setLayerType()方法。此外,我已经在应用程序级别定义了android:hardwareAccelerated =“true”。 – himanshurb

+0

升级Froyo占市场的1.6%,你真的想花时间试图弄明白? –

+0

它也发生在姜饼上。请帮忙。如果我们弄清楚什么,它会更好。 – himanshurb