我想开发一个Android应用程序,允许用户在手机屏幕上绘图,并显示正在使用的触摸手势(点击,长按,滚动等)。所以我相信要显示手指的痕迹,我们需要使用一个视图。我创建了两个独立的应用程序 - 一个显示正在执行的触摸手势,另一个允许用户绘制。
现在我想把两者结合起来。我该如何实现它?绘图在自定义视图上完成,而其他视图在活动中。
我尝试在视图上实现手势显示功能。我得到了以下错误:
空对象引用上的view.GestureDetectorCompat.onTouchEvent(android.view.MotionEvent)
以下是我的代码:
public class Tdraw extends View implements GestureDetector.OnDoubleTapListener, GestureDetector.OnGestureListener {
private TextPaint mTextPaint;
private float mTextWidth;
private float mTextHeight;
private TextView gesText;
private GestureDetectorCompat gDetector;
public Tdraw(Context context) {
super(context);
init(null, 0);
gesText = (TextView) findViewById(R.id.gesText);
gDetector = new GestureDetectorCompat(context, this);
gDetector.setOnDoubleTapListener(this);
}
public Tdraw(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs, 0);
}
public Tdraw(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(attrs, defStyle);
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
gesText.setText("Single Tap");
return false;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
gesText.setText("Double Tap");
return false;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return false;
}
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
gesText.setText("Scroll");
return false;
}
@Override
public void onLongPress(MotionEvent e) {
gesText.setText("Long Press");
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
gesText.setText("Fling");
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
gDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
}
XML:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_height="match_parent">
<com.example.anurooppv.gesturerec.Tdraw android:background="#ccc" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="20dp" android:paddingBottom="40dp"
app:exampleDimension="24sp" app:exampleColor="#33b5e5" app:exampleString="Hello, Tdraw"
app:exampleDrawable="@android:drawable/ic_menu_add"
android:id="@+id/view" />
<TextView
android:layout_width="258dp"
android:layout_height="66dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Perform a touch gesture"
android:id="@+id/textView"
android:layout_gravity="left|top"
android:textStyle="bold"
android:textSize="20dp" />
<TextView
android:layout_width="165dp"
android:layout_height="42dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/gesText"
android:layout_gravity="left|bottom" />
</FrameLayout>
错误的原因是什么?活动中的相同代码工作正常但在此失败。我如何结合这两个功能?提前谢谢。