自定义视图如何从活动中获取数据?

时间:2014-11-21 12:16:49

标签: android callback android-custom-view

我有一个自定义视图,它会对触摸事件作出反应:它会在我的Vector“currenMonsters”中搜索触摸位置,以识别“怪物”。 在自定义视图中我将绘制怪物。

当前Vector和带有怪物位图的hasmap(hashmapMonsterStandartBitmap)不在自定义视图中。他们参与了自定义视图的活动。

如何将触摸事件信息发送给活动? (我想通过接口回调?)

如何从自定义视图中访问存储在活动中的“currentMonster”向量?

目前我已经在视图中存储了currentMonster向量和hashmap以及其他一些逻辑 - 我想把它们放在活动中。

这里有一些代码示例(在costom视图中,短路):

@Override
  public boolean onTouchEvent(MotionEvent event) {

    // get pointer index from the event object
    int pointerIndex = event.getActionIndex();

    // get pointer ID
    int pointerId = event.getPointerId(pointerIndex);
    Log.i("touch","event.getPointerID(): "+pointerId);


    // get masked (not specific to a pointer) action
    int maskedAction = event.getActionMasked();

    switch (maskedAction) {

    //Detection of a finger touch
    case MotionEvent.ACTION_DOWN:
        totalClickt = totalClickt+1;
        fingerpointer = new PointF();
        fingerpointer.x = event.getX(0);
        fingerpointer.y = event.getY(0);

        for (int i=currentMonsters.size()-1; i >= 0; i--){
            if(currentMonsters.elementAt(i).getDimension().contains((int)fingerpointer.x, (int)fingerpointer.y)){
                Log.i("MonsterTouchted","MonsterTouched: index: "+i);
                attackMonster(currentMonsters.elementAt(i).getID());
            }
        }

    invalidate();

    return true;
  }
 }




 @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    // draw mosnters


    for(int i=0; i < currentMonsters.size();i++){
        if( currentMonsters.elementAt(i) != null){

            canvas.drawBitmap(hashmapMonsterStandartBitmap.get(currentMonsters.elementAt(i).getImagePath()),
                              currentMonsters.elementAt(i).getDimension().getX(),
                              currentMonsters.elementAt(i).getDimension().getY(),
                              mPaint); //bitmap, space left, space top, paint

        } else{
            Log.i("Failure","Draw monster nullpointer at index: "+i);
        }
    }

  }

提前致谢 - Ghal

1 个答案:

答案 0 :(得分:1)

您可以获取上下文并将其投射到您的活动中。您可以调用您的活动的公共方法。