setOnTouchListener移至View类

时间:2015-11-16 12:05:32

标签: java android

我有部分代码,一切正常,但是我需要View类中的方法handleTouch。我正在寻找解决方案如何将setOnTouchListener移动到不同的类或寻找更好的解决方案。

MainActivity.java

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    // looking solution from here
    RelativeLayout myLayout = (RelativeLayout)findViewById(R.id.RelativeLayout1);

    myLayout.setOnTouchListener(
            new RelativeLayout.OnTouchListener() {
                public boolean onTouch(View v, MotionEvent m) {
                    handleTouch(m);
                    return true;
                }
            }
    );


}

void handleTouch(MotionEvent m)
{
    TextView textView3 = (TextView)findViewById(R.id.textViewS);
    int pointerCount = m.getPointerCount();

    for (int i = 0; i < pointerCount; i++)
    {
        int x = (int) m.getX(i);
        int y = (int) m.getY(i);
        int action = m.getActionMasked();
        String arrow = null;

        switch (action)
        {
            case MotionEvent.ACTION_DOWN:

                if (x > 800 && y > 0)
                {
                    arrow = "right";
                }
                if (x < 500 && y > 0)
                {
                    arrow = "left";
                }
                if (x > 0 && y > 400)
                {
                    arrow = "down";
                }
                if (x > 0 && y < 200)
                {
                    arrow = "up";
                }
                textView3.setText(arrow);
                break;
            case MotionEvent.ACTION_UP:

                break;
        }

    }

}
      // to here
}

GraphicsView.java

 public class GraphicsView extends View {


    public GraphicsView(Context context, AttributeSet attributeSet) {
            super(context, attributeSet);
            setFocusable(true);
            setFocusableInTouchMode(true);

    }

  }

1 个答案:

答案 0 :(得分:0)

您可以覆盖自定义视图类中的onTouchEvent,即类中的GraphicsView。

@Override
public boolean onTouchEvent(MotionEvent event) {
    return super.onTouchEvent(event);
}

关于定义handleTouch(m);方法,您可以将其定义到自定义视图类中,您可以从覆盖的onTouchEvent方法获取MotionEvent,并根据需要返回箭头字符串。