我正在开发一个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" />
我不知道问题是什么,但它不会在屏幕上显示手势....
答案 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);
}
});