2012-04-12 3 views
0

Я новичок в Andoird.ImageView click best practice

В моем случае у меня есть сценарий, что при нажатии определенной части изображения он вызывает события onclick. Я попытался определить позицию, когда onTouch уволен, это работает, но я думаю, что это не стандартная реализация, так что лучше всего подходит для такого случая?

спасибо.

здесь коды, такие как:

imgView.setOnTouchListener ((OnTouchListener) новый OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) { 
    if(isIn(event.getX(), event.getY(), 124,3,221,36)){ 
     ShowMemberInfo(R.string.app_m01); 
    } else if(isIn(event.getX(), event.getY(), 8,155,72,181)){ 
     .. 
    } 
    return true; 
} 
private boolean isIn(float x, float y, int fx, int fy, int tx, int ty) { 
    return x<tx && x > fx && y<ty && y>fy; 
} 
+0

Можете ли вы показать нам свою реализацию, чтобы мы могли знать, является ли это, или это не стандартная реализация, или если есть лучшая практика? – Th0rndike

+0

Я изменил свой ответ. :) Может быть, вы можете попытаться использовать Rect для определения вашей области обнаружения и вызова contains(), чтобы проверить, находится ли точка касания внутри области или нет. – Chickenrice

ответ

0

Попробуйте использовать ImageButton

+0

это, это действительно полезно ... Ниже ссылка может быть лучшим подходом ... [link] (http://stackoverflow.com/questions/10137657/onclicklistener-issues-after-imagebutton-moved-after-translateanimation) – SICON

0

Просто реализовать onClickListener() для ImageView

Самый простой способ реализации OnClick событие является. включить android:onClickMe="methodName" внутри вашего <ImageView> в XML-макете и определить этот метод внутри вашего файла активности.

Например:

public void methodName(View v) 
{ 
    .... 
    .... 

    // do whatever you want for click even ton imageview 
} 
0

Если вы хотите, чтобы обнаружить позицию, в которой пользователь прикоснулся (по отношению к пользователю ImageView прикоснулся), вы можете получить точку касания от объекта MotionEvent ,

Попробуйте зарегистрировать прослушиватель событий касания для ImageView и получить позицию касания с помощью методов getX() и getY() объекта MotionEvent при срабатывании сенсорного события. Затем определите прямоугольную область и используйте contains(), чтобы проверить, находится ли точка касания внутри области или нет.

ImageView img = new ImageView(this); 
img.setOnTouchListener(new OnTouchListener(){ 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     Log.w("Hit test", "is hit? "+isIn(event.getX(),event.getY(),0,0,120,120)); 
     return false; 
    } 

}); 

private boolean isIn(float x, float y, int fx, int fy, int tx, int ty){ 
    return new Rect(fx,fy,tx,ty).contains((int)x,(int)y); 
} 

Надеюсь, это будет полезно для вас. :)