Get the co-ordinates of a touch event on Android

前端 未结 4 541
眼角桃花
眼角桃花 2020-11-30 04:26

I\'m new to Android, I\'ve followed the hello world tutorial through and have a basic idea of what\'s going on. I\'m particularly interested in the touch screen of my T-Mob

相关标签:
4条回答
  • 2020-11-30 04:32

    It sounds like you want to get touch events from the whole area of your layout for this particular test. Try attaching the touch listener to your parent view rather than a separate target view.

    This isn't a very common approach. In most cases you will want to listen for touch events in a specific child view and if you have other views in your layout that handle touch events (such as a button) they'll take priority over a parent view. See http://developer.android.com/guide/topics/ui/ui-events.html for more info about handling UI events.

    Layout (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>
    

    And in your activity:

    @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;
            }
        });
    }
    
    0 讨论(0)
  • 2020-11-30 04:36

    The corrected version without the errors:

    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;
        }
    }
    
    0 讨论(0)
  • 2020-11-30 04:43

    The following works using a touch screen on the jetboy sample android app. Joes code worked with one tweak to make it shine the background thru. The only line I added was

    android:background="#0000"
    android:layout_height="fill_parent"   
    android:layout_height="fill_parent" 
    

    Thanks Joe (above).

    @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;
            }
        });
    }
    

    layout code

    <?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>
    
    0 讨论(0)
  • 2020-11-30 04:47

    You can use this function : http://developer.android.com/reference/android/view/View.html#setOnTouchListener(android.view.View.OnTouchListener)

    You will probably put it in your onCreate method roughly this way (tested this time) :

    Activity onCreate code

    @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;
            }
        });
    }
    

    layout code

    <?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: I tried my code and indeed there were a few errors. Anyway, with the layout I give you here it works on my emulator. Can you provide maybe more code/context so I can see what's wrong?

    0 讨论(0)
提交回复
热议问题