import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.GestureDetector;
import android.widget.TextView;
import android.support.v4.view.GestureDetectorCompat;
public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener,
GestureDetector.OnDoubleTapListener{
private TextView buckysmesage;
private GestureDetectorCompat gestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
buckysmesage = (TextView) findViewById(R.id.textView);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
this.gestureDetector = new GestureDetectorCompat(this,this);
gestureDetector.setOnDoubleTapListener(this);
setContentView(R.layout.activity_main);
}
@Override
public boolean onDoubleTap(MotionEvent e) {
buckysmesage.setText("onDoubleTap");
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
buckysmesage.setText("onSingleTapConfirmed");
return true;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
buckysmesage.setText("onDoubleTapEvent");
return true;
}
@Override
public boolean onDown(MotionEvent e) {
buckysmesage.setText("onDown");
return true;
}
@Override
public void onShowPress(MotionEvent e) {
buckysmesage.setText("OnShowPress");
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
buckysmesage.setText("onSingleTapUp");
return true;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
buckysmesage.setText("onScroll");
return true;
}
@Override
public void onLongPress(MotionEvent e) {
buckysmesage.setText("OnLongPress");
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
buckysmesage.setText("ONFLING");
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
this.gestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
我不知道为什么我的应用程序没有运行,我正在做一个关于android手势的教程,基本上应用程序应该做的是用户输入的手势,它的名称显示在文本框中(buckysmessage) )。每次我将它加载到我的模拟器上并执行一个手势时,应用程序就会崩溃。如果任何人都可以通过我的代码并帮助我,这将是非常出色的。
答案 0 :(得分:1)
在使用布局中的视图之前先设置布局 -
在setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buckysmesage = (TextView) findViewById(R.id.textView);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
this.gestureDetector = new GestureDetectorCompat(this,this);
gestureDetector.setOnDoubleTapListener(this);
}
答案 1 :(得分:0)
我们应该在从布局获取对象之前添加setContentView(),问题是当你尝试做一些动作时你的手势方法会调用,而你试图在textview中显示消息,但是你的textview为null
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buckysmesage = (TextView) findViewById(R.id.textView);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
this.gestureDetector = new GestureDetectorCompat(this,this);
gestureDetector.setOnDoubleTapListener(this);
}