android Я не понимаю обнаружение длительного нажатия в моем подклассе ImageView

привет
Я новичок в программировании сенсорного экрана, пожалуйста, помогите мне!

У меня есть:

public class PhotoEditDrawView extends ImageView {

и у меня есть:

@Override
public boolean onTouchEvent(MotionEvent event) {

В конструкторе у меня есть:

setOnLongClickListener(new OnLongClickListener() {
@Override
    public boolean onLongClick(View v) {
        Toast.makeText(ctx, "hello hello ", Toast.LENGTH_SHORT).show();
        return true;
    }
});

onLongClick никогда не стреляет. Что я делаю не так?
Все в onTouchEvent работает хорошо.

Что я хочу сделать, так это начать действие с @android:style/Theme.Dialog при нажатии 1-2 секунды.


person Erik    schedule 27.05.2011    source источник


Ответы (2)


взгляните на этот небольшой фрагмент, он работает!

public class MyImageView extends ImageView {

private Context mContext;

public MyImageView(Context context) {
super(context);
setBackgroundColor(Color.RED);
mContext = context;
setOnLongClickListener(new OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
    Toast.makeText(mContext, "hello hello ", Toast.LENGTH_SHORT).show();
    return true;
    }

});
}

@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return super.onTouchEvent(event);
}

}

убедитесь, что вы возвращаете true в onTouchEvent и onLongClick, чтобы события продолжали срабатывать.

person stk    schedule 27.05.2011
comment
Есть ли способ увеличить время до срабатывания onLongClick? Сейчас около секунды. Я хотел бы 2 секунды, может быть - person Erik; 28.05.2011
comment
Я перемещаю текст (canvas.drawtext) на экране и хотел, чтобы пользователь мог редактировать размер и цвет шрифта при длительном нажатии. Задержка около 500 мс перед срабатыванием. Моя активность становится слишком легкой. - person Erik; 28.05.2011
comment
не знаю, как изменить это на стандартном прослушивателе onlongclick ... Я думаю, вам придется реализовать прослушиватель самостоятельно, как сказал daveD. Я также делал это раньше, это не слишком сложно (вам не нужна нить, чтобы сделать это). - person stk; 28.05.2011

У меня была точно такая же проблема с подклассом ImageView, событие onTouch сработало нормально, но я не смог получить длинное нажатие для регистрации в OnLongClickListener. В конце концов я просто вызвал System.currentTimeMillis() в событиях MotionEvent.ACTION_DOWN и MotionEvent.ACTION_UP, чтобы самостоятельно рассчитать разницу во времени. Не идеально, но это обошло проблему и работает.

person daveD    schedule 27.05.2011
comment
Спасибо. Мне нравится показывать всплывающее окно активности, когда палец все еще нажат. Возможно ли это, потому что ACTION_UP срабатывает, когда палец поднят правильно? - person Erik; 27.05.2011
comment
Я думаю, вам понадобится поток, чтобы обнаружить это, затем установите время в ACTION_DOWN, очистите его в ACTION_UP и пусть ваш поток увидит, не было ли очищено время через X миллисекунд. - person daveD; 28.05.2011
comment
спасибо, я должен начать деятельность с этой темы. Не знаю, думаю, я мог бы сделать это, пройдя в ctx - person Erik; 28.05.2011
comment
я пробую этот код link из первого ответа, написанного @ratana. Похоже на то, что вы описали, но нить всегда стреляет. немного поработаю над этим - person Erik; 28.05.2011