Android onTouch可以处理多个视图

时间:2014-09-18 01:27:51

标签: android touch views drag

我在LinearLayout中有三个水平排列的TextView。我想要做的是,当用户从第一个TextView开始触摸时,按下第二个TextView,最后在第三个TextView处结束触摸,并且所有三个TextView都应该用不同的背景颜色突出显示。我原本以这种方式尝试过:

    final TextView tv1 = (TextView)findViewById(R.id.text1);
    tv1.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            tv1.setBackgroundColor(Color.YELLOW);
            return true;
        }
    });

    final TextView tv2 = (TextView)findViewById(R.id.text2);
    tv2.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            tv2.setBackgroundColor(Color.BLUE);
            return true;
        }
    });

    final TextView tv3 = (TextView)findViewById(R.id.text3);
    tv3.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            tv3.setBackgroundColor(Color.RED);
            return true;
        }
    });

但结果是所有触摸,即使我在第一个TextView上调用onTouch()的ACTION_MOVEing到TextView 2。我想到的唯一一件事就是将OnTouchListener附加到父布局和每个触摸事件,查看当前触摸事件是否在任何子TextView上,并更改该子项的背景颜色(如果有)。但是我想知道Android是否有API这样做,或者有任何聪明的方法可以这样做。

1 个答案:

答案 0 :(得分:0)

您可以为每个文本视图使用选择器

android:background="@drawable/selector"

secltor drawable

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="true"
        android:drawable="@drawable/selected_state" />
</selector>

selectedstate

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
    <solid android:color="@color/required_color" />
</shape>