Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Androidʼþ·Ö·¢»úÖÆÍêÈ«½âÎö
 
  1640  次浏览      27
 2018-6-29
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcsdn,±¾ÎÄÏêϸ½âÎöÁËAndroidÖйØÓÚViewµÄʼþ·Ö·¢µÈ֪ʶ£¬Ï£Íû¿ÉÒÔ¸øÄúÌṩһЩ°ïÖú¡£

±ÈÈç˵Ä㵱ǰÓÐÒ»¸ö·Ç³£¼òµ¥µÄÏîÄ¿£¬Ö»ÓÐÒ»¸öActivity£¬²¢ÇÒActivityÖÐÖ»ÓÐÒ»¸ö°´Å¥¡£Äã¿ÉÄÜÒѾ­ÖªµÀ£¬Èç¹ûÏëÒª¸øÕâ¸ö°´Å¥×¢²áÒ»¸öµã»÷ʼþ£¬Ö»ÐèÒªµ÷Óãº

button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d("TAG", "onClick execute");
}
});

ÕâÑùÔÚonClick·½·¨ÀïÃæÐ´ÊµÏÖ£¬¾Í¿ÉÒÔÔÚ°´Å¥±»µã»÷µÄʱºòÖ´ÐС£Äã¿ÉÄÜÒ²ÒѾ­ÖªµÀ£¬Èç¹ûÏë¸øÕâ¸ö°´Å¥ÔÙÌí¼ÓÒ»¸ötouchʼþ£¬Ö»ÐèÒªµ÷Óãº

button.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.d("TAG", "onTouch execute, action " + event.getAction());
return false;
}
});

onTouch·½·¨ÀïÄÜ×öµÄÊÂÇé±ÈonClickÒª¶àһЩ£¬±ÈÈçÅжÏÊÖÖ¸°´Ï¡¢Ì§Æð¡¢Òƶ¯µÈʼþ¡£ÄÇôÈç¹ûÎÒÁ½¸öʼþ¶¼×¢²áÁË£¬ÄÄÒ»¸ö»áÏÈÖ´ÐÐÄØ£¿ÎÒÃÇÀ´ÊÔһϾÍÖªµÀÁË£¬ÔËÐгÌÐòµã»÷°´Å¥£¬´òÓ¡½á¹ûÈçÏ£º

¿ÉÒÔ¿´µ½£¬onTouchÊÇÓÅÏÈÓÚonClickÖ´Ðе쬲¢ÇÒonTouchÖ´ÐÐÁËÁ½´Î£¬Ò»´ÎÊÇACTION_DOWN£¬Ò»´ÎÊÇACTION_UP(Ä㻹¿ÉÄÜ»áÓжà´ÎACTION_MOVEµÄÖ´ÐУ¬Èç¹ûÄãÊÖ¶¶ÁËÒ»ÏÂ)¡£Òò´Ëʼþ´«µÝµÄ˳ÐòÊÇÏȾ­¹ýonTouch£¬ÔÙ´«µÝµ½onClick¡£

ϸÐĵÄÅóÓÑÓ¦¸Ã¿ÉÒÔ×¢Òâµ½£¬onTouch·½·¨ÊÇÓзµ»ØÖµµÄ£¬ÕâÀïÎÒÃÇ·µ»ØµÄÊÇfalse£¬Èç¹ûÎÒÃdz¢ÊÔ°ÑonTouch·½·¨ÀïµÄ·µ»ØÖµ¸Ä³Étrue£¬ÔÙÔËÐÐÒ»´Î£¬½á¹ûÈçÏ£º

ÎÒÃÇ·¢ÏÖ£¬onClick·½·¨²»ÔÙÖ´ÐÐÁË£¡ÎªÊ²Ã´»áÕâÑùÄØ£¿Äã¿ÉÒÔÏÈÀí½â³ÉonTouch·½·¨·µ»Øtrue¾ÍÈÏΪÕâ¸öʼþ±»onTouchÏû·ÑµôÁË£¬Òò¶ø²»»áÔÙ¼ÌÐøÏòÏ´«µÝ¡£

Èç¹ûµ½ÏÖÔÚΪֹ£¬ÒÔÉϵÄËùÓÐ֪ʶµãÄã¶¼ÊÇÇå³þµÄ£¬ÄÇô˵Ã÷Äã¶ÔAndroidʼþ´«µÝµÄ»ù±¾Ó÷¨Ó¦¸ÃÊÇÕÆÎÕÁË¡£²»¹ý±ðÂú×ãÓÚÏÖ×´£¬ÈÃÎÒÃÇ´ÓÔ´ÂëµÄ½Ç¶È·ÖÎöһϣ¬³öÏÖÉÏÊöÏÖÏóµÄÔ­ÀíÊÇʲô¡£

Ê×ÏÈÄãÐèÒªÖªµÀÒ»µã£¬Ö»ÒªÄã´¥Ãþµ½ÁËÈκÎÒ»¸ö¿Ø¼þ£¬¾ÍÒ»¶¨»áµ÷ÓøÿؼþµÄdispatchTouchEvent·½·¨¡£Äǵ±ÎÒÃÇÈ¥µã»÷°´Å¥µÄʱºò£¬¾Í»áÈ¥µ÷ÓÃButtonÀàÀïµÄdispatchTouchEvent·½·¨£¬¿ÉÊÇÄã»á·¢ÏÖButtonÀàÀﲢûÓÐÕâ¸ö·½·¨£¬ÄÇô¾Íµ½ËüµÄ¸¸ÀàTextViewÀïÈ¥ÕÒÒ»ÕÒ£¬Äã»á·¢ÏÖTextViewÀïҲûÓÐÕâ¸ö·½·¨£¬ÄÇû°ì·¨ÁË£¬Ö»ºÃ¼ÌÐøÔÚTextViewµÄ¸¸ÀàViewÀïÕÒÒ»ÕÒ£¬Õâ¸öʱºòÄãÖÕÓÚÔÚViewÀïÕÒµ½ÁËÕâ¸ö·½·¨£¬Ê¾ÒâͼÈçÏ£º

È»ºóÎÒÃÇÀ´¿´Ò»ÏÂViewÖÐdispatchTouchEvent·½·¨µÄÔ´Â룺

public boolean dispatchTouchEvent(MotionEvent event) {
if (mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED &&
mOnTouchListener.onTouch(this, event)) {
return true;
}
return onTouchEvent(event);
}

Õâ¸ö·½·¨·Ç³£µÄ¼ò½à£¬Ö»Óж̶̼¸ÐдúÂ룡ÎÒÃÇ¿ÉÒÔ¿´µ½£¬ÔÚÕâ¸ö·½·¨ÄÚ£¬Ê×ÏÈÊǽøÐÐÁËÒ»¸öÅжϣ¬Èç¹ûmOnTouchListener != null£¬(mViewFlags & ENABLED_MASK) == ENABLEDºÍmOnTouchListener.onTouch(this, event)ÕâÈý¸öÌõ¼þ¶¼ÎªÕ棬¾Í·µ»Øtrue£¬·ñÔò¾ÍÈ¥Ö´ÐÐonTouchEvent(event)·½·¨²¢·µ»Ø¡£

ÏÈ¿´Ò»ÏµÚÒ»¸öÌõ¼þ£¬mOnTouchListenerÕâ¸ö±äÁ¿ÊÇÔÚÄÄÀ︳ֵµÄÄØ£¿ÎÒÃÇѰÕÒÖ®ºóÔÚViewÀï·¢ÏÖÁËÈçÏ·½·¨£º

public void setOnTouchListener(OnTouchListener l) {
mOnTouchListener = l;
}

Bingo£¡ÕÒµ½ÁË£¬mOnTouchListenerÕýÊÇÔÚsetOnTouchListener·½·¨À︳ֵµÄ£¬Ò²¾ÍÊÇ˵ֻҪÎÒÃǸø¿Ø¼þ×¢²áÁËtouchʼþ£¬mOnTouchListener¾ÍÒ»¶¨±»¸³ÖµÁË¡£

µÚ¶þ¸öÌõ¼þ(mViewFlags & ENABLED_MASK) == ENABLEDÊÇÅжϵ±Ç°µã»÷µÄ¿Ø¼þÊÇ·ñÊÇenableµÄ£¬°´Å¥Ä¬È϶¼ÊÇenableµÄ£¬Òò´ËÕâ¸öÌõ¼þºã¶¨Îªtrue¡£

µÚÈý¸öÌõ¼þ¾Í±È½Ï¹Ø¼üÁË£¬mOnTouchListener.onTouch(this, event)£¬ÆäʵҲ¾ÍÊÇÈ¥»Øµ÷¿Ø¼þ×¢²átouchʼþʱµÄonTouch·½·¨¡£Ò²¾ÍÊÇ˵Èç¹ûÎÒÃÇÔÚonTouch·½·¨Àï·µ»Øtrue£¬¾Í»áÈÃÕâÈý¸öÌõ¼þÈ«²¿³ÉÁ¢£¬´Ó¶øÕû¸ö·½·¨Ö±½Ó·µ»Øtrue¡£Èç¹ûÎÒÃÇÔÚonTouch·½·¨Àï·µ»Øfalse£¬¾Í»áÔÙÈ¥Ö´ÐÐonTouchEvent(event)·½·¨¡£

ÏÖÔÚÎÒÃÇ¿ÉÒÔ½áºÏÇ°ÃæµÄÀý×ÓÀ´·ÖÎöÒ»ÏÂÁË£¬Ê×ÏÈÔÚdispatchTouchEventÖÐ×îÏÈÖ´ÐеľÍÊÇonTouch·½·¨£¬Òò´ËonTouch¿Ï¶¨ÊÇÒªÓÅÏÈÓÚonClickÖ´Ðеģ¬Ò²ÊÇÓ¡Ö¤Á˸ոյĴòÓ¡½á¹û¡£¶øÈç¹ûÔÚonTouch·½·¨Àï·µ»ØÁËtrue£¬¾Í»áÈÃdispatchTouchEvent·½·¨Ö±½Ó·µ»Øtrue£¬²»»áÔÙ¼ÌÐøÍùÏÂÖ´ÐС£¶ø´òÓ¡½á¹ûҲ֤ʵÁËÈç¹ûonTouch·µ»Øtrue£¬onClick¾Í²»»áÔÙÖ´ÐÐÁË¡£

¸ù¾ÝÒÔÉÏÔ´ÂëµÄ·ÖÎö£¬´ÓÔ­ÀíÉϽâÊÍÁËÎÒÃÇÇ°ÃæÀý×ÓµÄÔËÐнá¹û¡£¶øÉÏÃæµÄ·ÖÎö»¹Í¸Â©³öÁËÒ»¸öÖØÒªµÄÐÅÏ¢£¬ÄǾÍÊÇonClickµÄµ÷Óÿ϶¨ÊÇÔÚonTouchEvent(event)·½·¨Öеģ¡ÄÇÎÒÃÇÂíÉÏÀ´¿´ÏÂonTouchEventµÄÔ´Â룬ÈçÏÂËùʾ£º

public boolean onTouchEvent(MotionEvent event) {
final int viewFlags = mViewFlags;
if ((viewFlags & ENABLED_MASK) == DISABLED) {
// A disabled view that is clickable still consumes the touch
// events, it just doesn't respond to them.
return (((viewFlags & CLICKABLE) == CLICKABLE ||
(viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE));
}
if (mTouchDelegate != null) {
if (mTouchDelegate.onTouchEvent(event)) {
return true;
}
}
if (((viewFlags & CLICKABLE) == CLICKABLE ||
(viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
boolean prepressed = (mPrivateFlags & PREPRESSED) != 0;
if ((mPrivateFlags & PRESSED) != 0 || prepressed) {
// take focus if we don't have it already and we should in
// touch mode.
boolean focusTaken = false;
if (isFocusable() && isFocusableInTouchMode() && !isFocused()) {
focusTaken = requestFocus();
}
if (!mHasPerformedLongPress) {
// This is a tap, so remove the longpress check
removeLongPressCallback();
// Only perform take click actions if we were in the pressed state
if (!focusTaken) {
// Use a Runnable and post this rather than calling
// performClick directly. This lets other visual state
// of the view update before click actions start.
if (mPerformClick == null) {
mPerformClick = new PerformClick();
}
if (!post(mPerformClick)) {
performClick();
}
}
}
if (mUnsetPressedState == null) {
mUnsetPressedState = new UnsetPressedState();
}
if (prepressed) {
mPrivateFlags |= PRESSED;
refreshDrawableState();
postDelayed(mUnsetPressedState,
ViewConfiguration.getPressedStateDuration());
} else if (!post(mUnsetPressedState)) {
// If the post failed, unpress right now
mUnsetPressedState.run();
}
removeTapCallback();
}
break;
case MotionEvent.ACTION_DOWN:
if (mPendingCheckForTap == null) {
mPendingCheckForTap = new CheckForTap();
}
mPrivateFlags |= PREPRESSED;
mHasPerformedLongPress = false;
postDelayed(mPendingCheckForTap, ViewConfiguration.getTapTimeout());
break;
case MotionEvent.ACTION_CANCEL:
mPrivateFlags &= ~PRESSED;
refreshDrawableState();
removeTapCallback();
break;
case MotionEvent.ACTION_MOVE:
final int x = (int) event.getX();
final int y = (int) event.getY();
// Be lenient about moving outside of buttons
int slop = mTouchSlop;
if ((x < 0 - slop) || (x >= getWidth() + slop) ||
(y < 0 - slop) || (y >= getHeight() + slop)) {
// Outside button
removeTapCallback();
if ((mPrivateFlags & PRESSED) != 0) {
// Remove any future long press/tap checks
removeLongPressCallback();
// Need to switch from pressed to not pressed
mPrivateFlags &= ~PRESSED;
refreshDrawableState();
}
}
break;
}
return true;
}
return false;
}

Ïà½ÏÓڸղŵÄdispatchTouchEvent·½·¨£¬onTouchEvent·½·¨¸´ÔÓÁ˺ܶ࣬²»¹ýû¹ØÏµ£¬ÎÒÃÇÖ»ÌôÖØµã¿´¾Í¿ÉÒÔÁË¡£

Ê×ÏÈÔÚµÚ14ÐÐÎÒÃÇ¿ÉÒÔ¿´³ö£¬Èç¹û¸Ã¿Ø¼þÊÇ¿ÉÒÔµã»÷µÄ¾Í»á½øÈëµ½µÚ16ÐеÄswitchÅжÏÖÐÈ¥£¬¶øÈç¹ûµ±Ç°µÄʼþÊÇ̧ÆðÊÖÖ¸£¬Ôò»á½øÈëµ½MotionEvent.ACTION_UPÕâ¸öcaseµ±ÖС£ÔÚ¾­¹ýÖÖÖÖÅжÏÖ®ºó£¬»áÖ´Ðе½µÚ38ÐеÄperformClick()·½·¨£¬ÄÇÎÒÃǽøÈëµ½Õâ¸ö·½·¨ÀïÇÆÒ»ÇÆ£º

public boolean performClick() {
sendAccessibilityEvent
(AccessibilityEvent.TYPE_VIEW_CLICKED);
if (mOnClickListener != null) {
playSoundEffect(SoundEffectConstants.CLICK);
mOnClickListener.onClick(this);
return true;
}
return false;
}

¿ÉÒÔ¿´µ½£¬Ö»ÒªmOnClickListener²»ÊÇnull£¬¾Í»áÈ¥µ÷ÓÃËüµÄonClick·½·¨£¬ÄÇmOnClickListenerÓÖÊÇÔÚÄÄÀ︳ֵµÄÄØ£¿¾­¹ýѰÕÒºóÕÒµ½ÈçÏ·½·¨£º

public void setOnClickListener(OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
mOnClickListener = l;
}

Ò»Çж¼ÊÇÄÇôÇå³þÁË£¡µ±ÎÒÃÇͨ¹ýµ÷ÓÃsetOnClickListener·½·¨À´¸ø¿Ø¼þ×¢²áÒ»¸öµã»÷ʼþʱ£¬¾Í»á¸ømOnClickListener¸³Öµ¡£È»ºóÿµ±¿Ø¼þ±»µã»÷ʱ£¬¶¼»áÔÚperformClick()·½·¨Àï»Øµ÷±»µã»÷¿Ø¼þµÄonClick·½·¨¡£

ÕâÑùViewµÄÕû¸öʼþ·Ö·¢µÄÁ÷³Ì¾ÍÈÃÎÒÃǸãÇå³þÁË£¡²»¹ý±ð¸ßÐ˵ÄÌ«Ô磬ÏÖÔÚ»¹Ã»½áÊø£¬»¹ÓÐÒ»¸öºÜÖØÒªµÄ֪ʶµãÐèҪ˵Ã÷£¬¾ÍÊÇtouchʼþµÄ²ã¼¶´«µÝ¡£ÎÒÃǶ¼ÖªµÀÈç¹û¸øÒ»¸ö¿Ø¼þ×¢²áÁËtouchʼþ£¬Ã¿´Îµã»÷ËüµÄʱºò¶¼»á´¥·¢Ò»ÏµÁеÄACTION_DOWN£¬ACTION_MOVE£¬ACTION_UPµÈʼþ¡£ÕâÀïÐèҪעÒ⣬Èç¹ûÄãÔÚÖ´ÐÐACTION_DOWNµÄʱºò·µ»ØÁËfalse£¬ºóÃæÒ»ÏµÁÐÆäËüµÄaction¾Í²»»áÔٵõ½Ö´ÐÐÁË¡£¼òµ¥µÄ˵£¬¾ÍÊǵ±dispatchTouchEventÔÚ½øÐÐʼþ·Ö·¢µÄʱºò£¬Ö»ÓÐǰһ¸öaction·µ»Øtrue£¬²Å»á´¥·¢ºóÒ»¸öaction¡£

˵µ½ÕâÀºÜ¶àµÄÅóÓѿ϶¨ÒªÓо޴óµÄÒÉÎÊÁË¡£Õâ²»ÊÇÔÚ×ÔÏàì¶ÜÂð£¿Ç°ÃæµÄÀý×ÓÖУ¬Ã÷Ã÷ÔÚonTouchʼþÀïÃæ·µ»ØÁËfalse£¬ACTION_DOWNºÍACTION_UP²»ÊǶ¼µÃµ½Ö´ÐÐÁËÂð£¿ÆäʵÄãÖ»ÊDZ»¼ÙÏóËùÃÔ»óÁË£¬ÈÃÎÒÃÇ×Ðϸ·ÖÎöһϣ¬ÔÚÇ°ÃæµÄÀý×Óµ±ÖУ¬ÎÒÃǵ½µ×·µ»ØµÄÊÇʲô¡£

²Î¿¼×ÅÎÒÃÇÇ°Ãæ·ÖÎöµÄÔ´Â룬Ê×ÏÈÔÚonTouchʼþÀï·µ»ØÁËfalse£¬¾ÍÒ»¶¨»á½øÈëµ½onTouchEvent·½·¨ÖУ¬È»ºóÎÒÃÇÀ´¿´Ò»ÏÂonTouchEvent·½·¨µÄϸ½Ú¡£ÓÉÓÚÎÒÃǵã»÷Á˰´Å¥£¬¾Í»á½øÈëµ½µÚ14ÐÐÕâ¸öifÅжϵÄÄÚ²¿£¬È»ºóÄã»á·¢ÏÖ£¬²»¹Üµ±Ç°µÄactionÊÇʲô£¬×îÖÕ¶¼Ò»¶¨»á×ßµ½µÚ89ÐУ¬·µ»ØÒ»¸ötrue¡£

ÊDz»ÊÇÓÐÒ»ÖÖ±»ÆÛÆ­µÄ¸Ð¾õ£¿Ã÷Ã÷ÔÚonTouchʼþÀï·µ»ØÁËfalse£¬ÏµÍ³»¹ÊÇÔÚonTouchEvent·½·¨ÖаïÄã·µ»ØÁËtrue¡£¾ÍÒòΪÕâ¸öÔ­Òò£¬²ÅʹµÃÇ°ÃæµÄÀý×ÓÖÐACTION_UP¿ÉÒԵõ½Ö´ÐС£

ÄÇÎÒÃÇ¿ÉÒÔ»»Ò»¸ö¿Ø¼þ£¬½«°´Å¥Ìæ»»³ÉImageView£¬È»ºó¸øËüÒ²×¢²áÒ»¸ötouchʼþ£¬²¢·µ»Øfalse¡£ÈçÏÂËùʾ£º

imageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.d("TAG", "onTouch execute, action " + event.getAction());
return false;
}
});

ÔËÐÐһϳÌÐò£¬µã»÷ImageView£¬Äã»á·¢ÏÖ½á¹ûÈçÏ£º

ÔÚACTION_DOWNÖ´ÐÐÍêºó£¬ºóÃæµÄһϵÁÐaction¶¼²»»áµÃµ½Ö´ÐÐÁË¡£ÕâÓÖÊÇÎªÊ²Ã´ÄØ£¿ÒòΪImageViewºÍ°´Å¥²»Í¬£¬ËüÊÇĬÈϲ»¿Éµã»÷µÄ£¬Òò´ËÔÚonTouchEventµÄµÚ14ÐÐÅжÏʱÎÞ·¨½øÈëµ½ifµÄÄÚ²¿£¬Ö±½ÓÌøµ½µÚ91Ðзµ»ØÁËfalse£¬Ò²¾Íµ¼ÖºóÃæÆäËüµÄaction¶¼ÎÞ·¨Ö´ÐÐÁË¡£

ºÃÁË£¬¹ØÓÚViewµÄʼþ·Ö·¢£¬ÎÒÏë½²µÄ¶«Î÷È«¶¼ÔÚÕâÀïÁË¡£ÏÖÔÚÎÒÃÇÔÙÀ´»Ø¹ËһϿªÆªÊ±Ìáµ½µÄÄÇÈý¸öÎÊÌ⣬ÏàÐÅÿ¸öÈ˶¼»áÓиüÉîÒ»²ãµÄÀí½â¡£

1. onTouchºÍonTouchEventÓÐÊ²Ã´Çø±ð£¬ÓÖ¸ÃÈçºÎʹÓã¿

´ÓÔ´ÂëÖпÉÒÔ¿´³ö£¬ÕâÁ½¸ö·½·¨¶¼ÊÇÔÚViewµÄdispatchTouchEventÖе÷Óõģ¬onTouchÓÅÏÈÓÚonTouchEventÖ´ÐС£Èç¹ûÔÚonTouch·½·¨ÖÐͨ¹ý·µ»Øtrue½«Ê¼þÏû·Ñµô£¬onTouchEvent½«²»»áÔÙÖ´ÐС£

ÁíÍâÐèҪעÒâµÄÊÇ£¬onTouchÄܹ»µÃµ½Ö´ÐÐÐèÒªÁ½¸öǰÌáÌõ¼þ£¬µÚÒ»mOnTouchListenerµÄÖµ²»ÄÜΪ¿Õ£¬µÚ¶þµ±Ç°µã»÷µÄ¿Ø¼þ±ØÐëÊÇenableµÄ¡£Òò´ËÈç¹ûÄãÓÐÒ»¸ö¿Ø¼þÊÇ·ÇenableµÄ£¬ÄÇô¸øËü×¢²áonTouchʼþ½«ÓÀÔ¶µÃ²»µ½Ö´ÐС£¶ÔÓÚÕâÒ»Àà¿Ø¼þ£¬Èç¹ûÎÒÃÇÏëÒª¼àÌýËüµÄtouchʼþ£¬¾Í±ØÐëͨ¹ýÔڸÿؼþÖÐÖØÐ´onTouchEvent·½·¨À´ÊµÏÖ¡£

2. Ϊʲô¸øListViewÒýÈëÁËÒ»¸ö»¬¶¯²Ëµ¥µÄ¹¦ÄÜ£¬ListView¾Í²»Äܹö¶¯ÁË£¿

Èç¹ûÄãÔĶÁÁËAndroidʵÏÖͼƬ¹ö¶¯¿Ø¼þ£¬º¬Ò³Ç©¹¦ÄÜ£¬ÈÃÄãµÄÓ¦ÓÃÏñÌÔ±¦Ò»ÑùìÅÆðÀ´ ÕâÆªÎÄÕ¡£µ±Ê±ÎÒÔÚͼƬÂÖ²¥Æ÷ÀïʹÓÃButton£¬Ö÷Òª¾ÍÊÇÒòΪButtonÊǿɵã»÷µÄ£¬¶øImageViewÊDz»¿Éµã»÷µÄ¡£Èç¹ûÏëҪʹÓÃImageView£¬¿ÉÒÔÓÐÁ½Öָ퍡£µÚÒ»£¬ÔÚImageViewµÄonTouch·½·¨Àï·µ»Øtrue£¬ÕâÑù¿ÉÒÔ±£Ö¤ACTION_DOWNÖ®ºóµÄÆäËüaction¶¼Äܵõ½Ö´ÐУ¬²ÅÄÜʵÏÖͼƬ¹ö¶¯µÄЧ¹û¡£µÚ¶þ£¬ÔÚ²¼¾ÖÎļþÀïÃæ¸øImageViewÔö¼ÓÒ»¸öandroid:clickable="true"µÄÊôÐÔ£¬ÕâÑùImageView±ä³É¿Éµã»÷µÄÖ®ºó£¬¼´Ê¹ÔÚonTouchÀï·µ»ØÁËfalse£¬ACTION_DOWNÖ®ºóµÄÆäËüactionÒ²ÊÇ¿ÉÒԵõ½Ö´Ðеġ£

   
1640 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì