setGesture()在屏幕外显示手势:Android

时间:2011-08-16 09:24:19

标签: android gesture

我正在开发一个Android应用程序,我需要向用户显示保存的手势。我尝试过使用GestureOverlayView对象的setGesture()函数,但它在屏幕外显示手势。在Android模拟器2.1中,屏幕左上角只能看到一小部分。 这是我用过的代码..

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.savegesture);
    gestureoverlay = (GestureOverlayView) findViewById(R.id.gestures_overlay2);
    mOldGesture = (Gesture) getIntent().getExtras().get("gesture");
    mDoneButton = findViewById(R.id.done);
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    gestureoverlay.setLayoutParams(new FrameLayout.LayoutParams(dm.widthPixels,dm.heightPixels,0x50));
    gestureoverlay.setGesture(mOldGesture);
    gestureoverlay.invalidate();
}

“savegesture.xml”中定义的android GestureOverlayView如下: -

<android.gesture.GestureOverlayView android:scaleType="center" android:layout_gravity="center"
    android:id="@+id/gestures_overlay2" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:gestureStrokeType="multiple" />

我不知道问题是什么,但它不会在屏幕上显示手势....

2 个答案:

答案 0 :(得分:3)

虽然这是一个3岁的问题,但我仍然会添加答案。

手势显示在GestureOverlayView之外,因为它已在onCreate中设置。必须在计算布局测量值后设置它。

ViewTreeObserver可用于了解布局何时被测量。

ViewTreeObserver vto = gestureoverlay.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
        gestureoverlay.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        gestureoverlay.setGesture(mOldGesture);
    } 
});

答案 1 :(得分:0)

尽管这是一个5岁的问题,我还是会添加一个答案,因为与此相比,批准的答案效率低下:

在加载视图后使用view.post()执行代码。

gestureoverlay.post(new Runnable() {
   @Override
   public void run() {
      gestureoverlay.setGesture(mOldGesture);
   }
});