扩展视图并使用onLongclick

时间:2012-02-11 13:43:56

标签: android view

我已经扩展了android View类,现在我想在视图中定义一个方法,该方法在视图被longClicked时启动。

我已经使用public boolean onTouchEvent(MotionEvent event)对动作事件采取了行动。此方法不允许长时间点击以对其执行操作。

我想在扩展的View类本身中完成它。我知道我可以在活动中的视图中添加一个OnLongClickListener,但我想知道是否有办法在View中实现它。

public class ArchitectureView extends GraphView implements OnLongClickListener {

public ArchitectureView(Context context) {
    super(context);
    this.setOnLongClickListener(this);
}

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

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

        case MotionEvent.ACTION_UP:
            break;

        case MotionEvent.ACTION_CANCEL:
            break;

    }

    return true;
}

@Override
public boolean onLongClick(View v) {
    Log.e("I've been", "longclicked");
    return false;
}

}

GraphView从View扩展,并覆盖onTouchEvent和calles super

2 个答案:

答案 0 :(得分:2)

在您看来,您可以使用GestureDetectorOnGestureListener来实现此目的。在形式上,您应该为View类实现OnGestureListener并在您的类中定义GestureDetector

public class YourView extends View implements OnGestureListener {
    private GestureDetector detector;

    public YourView(Context context) {
        super(context);
        detector = new GestureDetector(context, this); // "this" refers to the OnGestureListener
    }
    // Override onTouchEvent to get the Touch event for the gesture detector.
    @Override
    public boolean onTouchEvent(MotionEvent e) {
        boolean handled = detector.onTouchEvent(e);
        if (handled) {
            return true;
        }
        return super.onTouchEvent(e);
    }
    // Some override methods from the OnGestureListener interface
    @Override
    public void onLongPress(MotionEvent e) {
    // Your implementation here
    }
    // Other override methods, for example, onScroll() etc.
}

答案 1 :(得分:0)

你可以发布你的onTouchEvent()方法吗?

我认为你必须在触摸事件回调中将longpress的参数实现为逻辑。

为了做到这一点,你必须测试longpress的“模式”

类似于if(ACTION_UP_TIME<(ACTION_DOWN_TIME + someMillis))

编辑:考虑到更多,你不能只在视图对象上实现OnLongClickListener,然后覆盖onLongClick()回调吗?

像这样:

public class TestView extends View implements OnLongClickListener{

public TestView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub

    //I am not certain if you'd need the next line or not.
    this.setOnLongClickListener(this);
}


@Override
public boolean onLongClick(View v){
    //do things

    return false;

}

}