2015-04-28 67 views
1

我正在拖動手指並移動到下一個視圖。這兩個視圖都實現了setOnTouchListener()。當手指移動到下一個視圖時觸摸事件

如何找出手指現在處於第二視圖。

即使我的手指處於第二視圖,ACTION_MOVE也會返回第一個視圖。

我是否需要實現其他偵聽器?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
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="com.example.textview.MainActivity" > 

<TextView 
    android:id = "@+id/text1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/hello_world" /> 

<TextView 
    android:id = "@+id/text2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="hello_world1" /> 

<TextView 
    android:id = "@+id/text3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="hello_world2" /> 

</LinearLayout> 

MainActivity.java:

package com.example.textview; 

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.widget.TextView; 

public class MainActivity extends ActionBarActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    TextView txt1 = (TextView) findViewById(R.id.text1); 
    txt1.setOnTouchListener(new OnTouchListener() {   
     @Override 
     public boolean onTouch(View v, MotionEvent e) { 
      TextView txt1 = (TextView) findViewById(v.getId()); 
      Log.d("txt1.getText()",txt1.getText().toString()); 
      return false; 
     } 
    }); 

    txt1 = (TextView) findViewById(R.id.text2); 
    txt1.setOnTouchListener(new OnTouchListener() {   
     @Override 
     public boolean onTouch(View v, MotionEvent e) { 
      TextView txt1 = (TextView) findViewById(v.getId()); 
      Log.d("txt1.getText()",txt1.getText().toString()); 
      return false; 
     } 
    }); 


    txt1 = (TextView) findViewById(R.id.text3); 
    txt1.setOnTouchListener(new OnTouchListener() {   
     @Override 
     public boolean onTouch(View v, MotionEvent e) { 
      TextView txt1 = (TextView) findViewById(v.getId()); 
      Log.d("txt1.getText()",txt1.getText().toString()); 
      return false; 
     } 
    }); 
} 

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

回答

0

您可以查看當前MotionEvent x和y是在第二視圖命中矩形

  Rect viewHitRect = new Rect(); 
     secondView.getHitRect(viewHitRect); 
     if(viewHitRect.contains((int) motionEvent.getX(), (int) motionEvent.getY())) {//You are in 2nd view} 
+0

我的文字視圖是動態添加的。在完成新的操作後,我將添加setOnTouchListener – user4057066

+0

在這種情況下,您可以通過該操作獲得第一個視圖的hitrect,如果手指已移出第一個視圖,您將知道該命令。 – Manish

+0

是的。但是我在for循環中添加了26個視圖。 – user4057066

0

當手指在textview2到來,將獲得ACTION_HOVER_ENTER

textview1將得到ACTION_HOVER_EXIT

檢查這些參數,正如你所說,但hover參數明確決定哪些textfield是根據手指在這個時候

UPDATE ACTION_MOVE將給予textview1

如果手指被點擊views那麼你將得到ACTION_DOWNtextview2並行textview1將獲得ACTION_UP

+0

手指被按下,而不是在屏幕上懸停。仍懸停事件將被稱爲? – user4057066

+0

我已經更新了我的答案..請檢查..如果手指被點擊,那麼您將獲得ACTION_HOVER - > ACTION_DOWN事件一個接一個 – Kushal

+0

是的。但在我的情況下,手指按在view1上。現在不用移動手指就可以拖動手指進入第二個視圖。如何處理這個。 – user4057066