2014-01-06 50 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