我已經看過其他關於這個問題,並沒有適用於我的情況。我的onDraw方法在自定義視圖中被不斷調用,大概有一次.3秒。onDraw方法不斷被調用
我有一個自定義視圖,繪製地圖的建築物的內部。該視圖比視圖區域大,因此我將自定義視圖封裝在自定義ScrollView和HorizontalScrollView中。 onDraw方法很大,所以我不能在這裏發佈它。不過,我已經從onDraw中刪除了所有的代碼,並沒有改變任何東西。
如果我刪除了使用的兩種滾動視圖,onDraw有一次只調用,只會被再次調用,如果我捏縮放地圖。
編輯:在全定製滾動類添加。垂直滾動類與此相同。
public class SCEHorizontalScrollViewBase extends HorizontalScrollView {
private GestureDetector mGestureDetector;
private String TAG = this.getClass().getName();
public SCEHorizontalScrollViewBase(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(context, new XScrollDetector());
setFadingEdgeLength(10);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Log.d(TAG, "onInterceptTouchEvent");
return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev) && ev.getPointerCount()==1;
}
// Return false if we're scrolling in the Y direction
class XScrollDetector extends SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Log.d(TAG, "onScroll");
super.onScroll(e1, e2, distanceX, distanceY);
if(Math.abs(distanceY) < Math.abs(distanceX)) {
return true;
}
return false;
}
}
}
佈局文件添加。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent" >
<mobile.base.SCEScrollViewBase
android:fillViewport="true"
android:id="@+id/warehouseScrollWidget"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:scrollbarFadeDuration="999999"
android:scrollbarStyle="outsideOverlay" >
<mobile.base.SCEHorizontalScrollViewBase
android:fillViewport="true"
android:id="@+id/warehouseHorizontalScrollWidget"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:scrollbarFadeDuration="999999"
android:scrollbarStyle="outsideOverlay" >
<mobile.base.widgets.SCEWidgetWarehouseView
android:id="@+id/WarehouseView"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
</mobile.base.SCEHorizontalScrollViewBase>
</mobile.base.SCEScrollViewBase>
</RelativeLayout>
從我的日誌中我得到這個。
08-27 15:28:32.376: mobile.base.SCEHorizontalScrollViewBase(21571): requestLayout
08-27 15:28:32.376: mobile.base.widgets.SCEWidgetWarehouseView(21571): requestLayout
08-27 15:28:32.386: mobile.base.SCEScrollViewBase(21571): requestLayout
08-27 15:28:32.386: mobile.base.SCEHorizontalScrollViewBase(21571): requestLayout
08-27 15:28:32.386: mobile.base.SCEScrollViewBase(21571): requestLayout
08-27 15:28:32.416: mobile.base.widgets.SCEWidgetWarehouseView(21571): onMeasure set 972.5,1765.0
08-27 15:28:32.416: mobile.base.widgets.SCEWidgetWarehouseView(21571): onMeasure set 972.5,1765.0
08-27 15:28:32.456: mobile.base.widgets.SCEWidgetWarehouseView(21571): onMeasure set 972.5,1765.0
08-27 15:28:32.456: mobile.base.widgets.SCEWidgetWarehouseView(21571): onMeasure set 972.5,1765.0
08-27 15:28:32.476: mobile.base.SCEScrollViewBase(21571): onDraw
08-27 15:28:32.486: mobile.base.SCEHorizontalScrollViewBase(21571): onDraw
08-27 15:28:32.486: mobile.base.widgets.SCEWidgetWarehouseView(21571): onDraw
08-27 15:28:32.877: mobile.base.SCEScrollViewBase(21571): onDraw
08-27 15:28:32.877: mobile.base.SCEHorizontalScrollViewBase(21571): onDraw
08-27 15:28:32.877: mobile.base.widgets.SCEWidgetWarehouseView(21571): onDraw
08-27 15:28:33.117: mobile.base.SCEScrollViewBase(21571): onDraw
08-27 15:28:33.117: mobile.base.SCEHorizontalScrollViewBase(21571): onDraw
08-27 15:28:33.117: mobile.base.widgets.SCEWidgetWarehouseView(21571): onDraw
任何想法,爲什麼它這樣做?它之前沒有這樣做,有些事情發生了變化,我不知道是什麼。之前用於滾動的屏幕相當快,現在幾乎沒有移動。
您是否檢查過文檔以確保您不必調用super.onScroll()方法? (只是嘗試一個幸運的猜測)。可能發佈你的全班? – Kerry
好想但不,沒有改變任何東西。我添加了完整的卷軸類。我使用了其中的兩個,一個用於水平,一個用於垂直。 –
每'的onDraw()'在android系統的方法將在屏幕的刷新率稱爲e.g:每秒40次的SDK <16本60次每秒的SDK> = 16 – tolgap