我有部分代码,一切正常,但是我需要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);
}
}
答案 0 :(得分:0)
您可以覆盖自定义视图类中的onTouchEvent,即类中的GraphicsView。
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
关于定义handleTouch(m);
方法,您可以将其定义到自定义视图类中,您可以从覆盖的onTouchEvent方法获取MotionEvent,并根据需要返回箭头字符串。