有关主要活动和自定义视图的问题

时间:2011-09-22 19:40:23

标签: android xml

我正在开发一个在线手写识别工具。我有一个自定义视图,我添加到线性布局。如何在自定义视图中获取坐标并将其传输到主活动文件以将其存储在链接列表或数组列表中

2 个答案:

答案 0 :(得分:0)

您可以在视图上覆盖方法OnTouchEvent。

public boolean onTouchEvent(MotionEvent event) {
   float x=event.getX();
   float y=event.getY();
}

然后如果你愿意,你可以构建一个数组或一个List。

ArrayList<Point> myList;
 ...
//Constructor
 ...
 ...
public boolean onTouchEvent(MotionEvent event) {
    float x=event.getX();
    float y=event.getY();
    Point p =new Point();
    p.set(x, y);
    //And then add to the list
    myList.add(p);
}
public ArrayList<Point> getMyArray(){
    return myList;
}

并调用自定义视图的方法getMyArray。您可以在主要活动上使用此代码

myView mv = (myView)this.findViewById(R.id.myView1);
ArrayList<Point> points = mv.getMyArray();

这可能是解决您问题的方法,但我不知道它是否对您有所帮助。

编辑:此解决方案适用于所有海关视图,但如果我是你,我会使用扩展SurfaceView的视图。这是合乎逻辑的,因为我认为这是在手写工具中创建图形的最佳方式。

答案 1 :(得分:0)

您需要创建一个实现OnTouchListener接口的自定义类,并将其设置为在自定义视图上侦听触摸事件。它非常类似于向按钮添加OnClickListener:

MyView view = (MyView) findViewById(R.id.myView);
view.setOnTouchListener(new MyOnTouchListener()); 

MyOnTouchListener看起来像这样:

class MyOnTouchListener implement OnTouchListener{
public int x=-1,y=-1,prevX=-1, prevY=-1;

public boolean onTouch(View v, MotionEvent event)
{
    prevX = x;
    prevY = y;      
    int x = (int)event.getX();  
    int y = (int)event.getY();

    switch(event.getAction()){
    case MotionEvent.ACTION_DOWN:

        // there is no prev touch
        prevX = -1;
        prevY = -1;

        // touch down code

        break;

    case MotionEvent.ACTION_MOVE:
        // touch move code
        // add points to array here!
        break;

    case MotionEvent.ACTION_UP:
        // touch up code
        break;
    }
    return true;
}
}