Вызов функции в действии из SimpleOnGestureListener - PullRequest
0 голосов
/ 02 января 2012

У меня есть основной вид деятельности с пользовательским холстом:

    public void onCreate(Bundle savedInstanceState) {
        ...
        CustomCanvas c = new CustomCanvas(this);
        c.requestFocus();
        cll = (LinearLayout)findViewById(R.id.CLL);
        cll.addView(c);
    }

    public void qwerty(String w) {
        ....
        TextView abc = (TextView)findViewById(R.id.TextViewabc);
        abc.setText(w);
        ....
    }

Внутри CustomCanvas у меня есть GestureDetector с SimpleOnGestureListener. Я хочу вызвать qwerty () из методов SimpleOnGestureListener (например, onSingleTapConfirmed)

Возможно ли это? Если нет, есть ли другой способ сделать это? Спасибо

.... РЕДАКТИРОВАТЬ ..... (подробнее)

GestureDetector - это объект в моем CustomCanvas

public class CustomCanvas extends View {

    GestureDetector gd;
    ...

    public CustomCanvas(final Context context) {
        super(context);

        gd = new GestureDetector(getContext(), new SimpleOnGestureListener() {
            ....
            //  I also use getScrollX() and getScrollY() in some of the methods here
        });
    }

    ....

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return gd.onTouchEvent(ev);
    }
}

1 Ответ

0 голосов
/ 02 января 2012

У вас есть два варианта.Либо вы реализуете SimpleOnGestureListener в Activity и устанавливаете его в CustomCanvas, либо передаете Activity в CustomCanavas, чтобы вы могли вызывать qwerty () для него из слушателя внутри класса CustomCanvas.

ОБНОВЛЕНИЕ

public class CustomCanvas extends View {

    GestureDetector gd;
    YourActivity mYourActivity;
    ...

    public CustomCanvas(final Context context) {
        super(context);

        gd = new GestureDetector(getContext(), new SimpleOnGestureListener() {                   
              public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY){
                  // this implementation makes no sense 
                  if(mYourActivity != null){
                     mYourActivity.qwerty(); 
                  }    
              }    
        });
    }

    public setActivity(YourActivity activity){
         mYourActivity = activity;
    }
}

В вашем классе действий вы должны передать действие в CustomCanvas.

public class YourActivity {

    public void onCreate(Bundle savedInstanceState) {
        ...
        CustomCanvas c = new CustomCanvas(this);

        // pass the activity to the canvas
        c.setActivity(this);

        c.requestFocus();
        cll = (LinearLayout)findViewById(R.id.CLL);
        cll.addView(c);
    }

    public void qwerty(String w) {
        ....
        TextView abc = (TextView)findViewById(R.id.TextViewabc);
        abc.setText(w);
        ....
    }
}
...