2015-04-28 5 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 х и у находится в второго виде хита прямоугольнике

  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

В этом случае здесь вы можете получить хитрость для первого представления, чтобы узнать, переместился ли палец из первого представления. – Manish

+0

Да. Но я добавляю 26 просмотров в цикл for. – user4057066

0

Когда палец приходит на textview2, это будет получать ACTION_HOVER_ENTER и

textview1 получит ACTION_HOVER_EXIT

Проверка по этим параметрам, ACTION_MOVE будет дано textview1 как вы упомянули, но hover параметр четко определить, какие textfield находится под пальцем в это время

UPDATE:

Если нажать пальцем на views, вы получите ACTION_DOWN на textview2 и parally textview1 будет получать ACTION_UP

+0

Палец нажимается и не нависает на экране. Будет называться событие hover? – user4057066

+0

Я обновил свой ответ .. Пожалуйста, проверьте .. если щелкнуть пальцем, вы получите ACTION_HOVER -> ACTION_DOWN событие один за другим – Kushal

+0

Да. Но в моем случае палец нажат на view1. Теперь, не двигая пальцем, я потащил, а палец - на второй взгляд. Как справиться с этим. – user4057066