这可能是一个非常新手的问题,但我无法以编程方式添加GestureOverlayView。我有一个基本的你好世界应用程序,我正在尝试与合并我的真实应用程序之前。坦率地说,我有点过头了,因为这将是我的第一个Android应用程序。
无论如何,与代码相处,我的fragment_main.xml看起来像这样:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relative_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="pha.viz.gesturetest.MainActivity$PlaceholderFragment" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
现在我的MainActivity.java是:
public class MainActivity extends ActionBarActivity {
private GestureLibrary mLibrary;
RelativeLayout mRelativeLayout = (RelativeLayout) findViewById(R.id.relative_layout);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);
mLibrary.load();
GestureOverlayView gestures = new GestureOverlayView(this);
gestures.setGestureStrokeAngleThreshold(90.0f);
gestures.addOnGesturePerformedListener(handleGestureListener);
mRelativeLayout.addView(gestures);
Display display = getWindowManager().getDefaultDisplay();
LayoutParams params = gestures.getLayoutParams();
params.width = display.getWidth() / 2;
gestures.setLayoutParams(params);
gestures.setTranslationX(0);
}
private OnGesturePerformedListener handleGestureListener = new
OnGesturePerformedListener() {
@Override
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
ArrayList<Prediction> predictions = mLibrary.recognize(gesture);
// one prediction needed
if (predictions.size() > 0) {
Prediction prediction = predictions.get(0);
// checking prediction
if (prediction.score > 1.0) {
// and action
Toast.makeText(getApplicationContext(), prediction.name,Toast.LENGTH_SHORT).show();
}
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.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();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
return rootView;
}
}
}
问题在于它正在崩溃。不可否认,我遵循与TextView相同的步骤,我认为它会起作用,所以我可能会遗漏一些非常明显的东西。
如果我手动将GestureOverlayView添加到fragment_main.xml并在MainActivity中引用它,我也知道代码有效,但是当我尝试更改它以在代码中创建“新”GestureOverlayView时并将其添加到我的RelativeLayout,它会崩溃。
感谢您阅读所有这些内容,感谢您给我的任何帮助或见解。
PS。我认为,为什么我要经历以编程方式而不是通过XML文件执行此操作的麻烦,您可能会感兴趣。原因是我试图快速识别大量手势。我发现另一个测试文件中有一个GestureOverlayView很慢,你会一次识别一个。然而,并排,他们将能够同时创建预测,给人一种“更快”的幻觉。通过一些工作,我希望在触摸时创建额外的GestureOverlayViews,并在命令完成后销毁它们。但是我甚至无法通过这个简单的测试来解决这个问题,即视图的创建。
答案 0 :(得分:0)
看起来像NullPointerException
。 A.B.C形式的行上的空指针异常意味着点左侧的某些内容为空。在您的情况下,这似乎出现在MainActivity的第28行。好像它无法通过id找到视图。要么你的身份证被误解了。请检查一下。