私はAndroidを初めて使用します。helloworldのチュートリアルをたどって、何が起こっているのかという基本的な考えを持っています。私はT-Mobile Pulseのタッチスクリーンに特に興味がありますので、始めるために画面にtocuhイベントの座標を書きたいので、ユーザーが座標5に触れたと言います、2-画面上のテキストビューにそれが表示されます。
現在、座標を書き込むつもりのtextviewを含むxmlファイルを読み込む単純なプログラムがあります。
事前にありがとう、私はGoogleに助けを求め、stackoverflowを検索しましたが、見つけたものはすべて頭に浮かぶか、これに適していないかのいずれかでした。乾杯。
この関数を使用できます: http://developer.Android.com/reference/Android/view/View.html#setOnTouchListener(Android.view.View.OnTouchListener)
おそらくこの方法でonCreateメソッドに配置するでしょう(今回はテスト済みです):
アクティビティonCreateコード
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView textView = (TextView)findViewById(R.id.textView);
// this is the view on which you will listen for touch events
final View touchView = findViewById(R.id.touchView);
touchView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
textView.setText("Touch coordinates : " +
String.valueOf(event.getX()) + "x" + String.valueOf(event.getY()));
return true;
}
});
}
レイアウトコード
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
>
<TextView
Android:id="@+id/touchView"
Android:background="#f00"
Android:layout_weight="1"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
/>
<TextView
Android:id="@+id/textView"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Hello World, TestActivity"
/>
</LinearLayout>
Edit:私は自分のコードを試しましたが、実際にはいくつかのエラーがありました。とにかく、私がここで提供するレイアウトで、それは私のエミュレータで動作します。何が間違っているのかわかるように、もっと多くのコード/コンテキストを提供してもらえますか?
この特定のテストのために、レイアウトの全領域からタッチイベントを取得したいようです。個別のターゲットビューではなく、親ビューにタッチリスナーをアタッチしてみてください。
これはあまり一般的なアプローチではありません。ほとんどの場合、特定の子ビューでタッチイベントをリッスンする必要があり、レイアウト内にタッチイベントを処理する他のビュー(ボタンなど)がある場合は、親ビューよりも優先されます。 UIイベントの処理の詳細については、 http://developer.Android.com/guide/topics/ui/ui-events.html を参照してください。
レイアウト(touch_viewer.xml):
<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical"
Android:id="@+id/parent" >
<TextView Android:id="@+id/text"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Hello, World!" />
</LinearLayout>
そしてあなたの活動では:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.touch_viewer);
final LinearLayout parent = (LinearLayout) findViewById(R.id.parent);
final TextView text = (TextView) findViewById(R.id.text);
parent.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent ev) {
text.setText("Touch at " + ev.getX() + ", " + ev.getY());
return true;
}
});
}
以下は、jetboyサンプルのタッチスクリーンを使用して動作しますAndroid app。Joesのコードは1つのTweakと連携して、背景を照らします。追加した唯一の行は
Android:background="#0000"
Android:layout_height="fill_parent"
Android:layout_height="fill_parent"
おかげでジョー(上)。
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView textView = (TextView)findViewById(R.id.textView);
// this is the view on which you will listen for touch events
final View touchView = findViewById(R.id.touchView);
touchView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
textView.setText("Touch coordinates : " +
String.valueOf(event.getX()) + "x" + String.valueOf(event.getY()));
return true;
}
});
}
レイアウトコード
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<com.Android.samples.jetboy.JetBoyView Android:id="@+id/JetBoyView"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" />
<TextView
Android:id="@+id/touchView"
Android:background="#0000"
Android:layout_weight="1"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
/>
<TextView
Android:id="@+id/textView"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:text="Hello World, TestActivity"
/>
</FrameLayout>
エラーのない修正バージョン:
import Android.os.Bundle;
import Android.app.Activity;
import Android.view.Menu;
import Android.view.MotionEvent;
import Android.view.View;
import Android.widget.TextView;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView textView = (TextView) findViewById(R.id.textView);
// this is the view on which you will listen for touch events
final View touchView = findViewById(R.id.touchView);
touchView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
textView.setText("Touch coordinates : "
+ String.valueOf(event.getX()) + "x"
+ String.valueOf(event.getY()));
return true;
}
});
}
@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;
}
}