在android中的圆形button..避免按下“外部”button?

我已经创build/试图创build,通过使用ImageButton“小部件”Android的圆形button。 但是,由于这种types的button被视为一个正方形,我的PNG图像也被视为一个具有透明背景的正方形,那么如何避免用户能够按下圆形button? ..他们可以按下button的“angular落”,并仍然会触发点击事件..是否有任何speciall贴图层可以在Photoshop中完成或以任何方式来改变图像button的半径,所以它适合我的形象“圆”或任何想法?

在此先感谢!..对不起英文不好

Solutions Collecting From Web of "在android中的圆形button..避免按下“外部”button?"

尝试毕达哥拉斯定理和onTouch,简单而简单的方法来做到这一点。

public boolean inCircle(MotionEvent e, int radius, int x, int y) { int dx = ex - x; int dy = ey - y; double d = Math.sqrt((dx * dx) + (dy * dy)); if(d < radius) return true; return false; } 

x,y是圆的位置,半径是半径,e是TouchEvent。

 @Override public boolean onTouch(View arg0, MotionEvent arg1) { if(arg1.getAction() == MotionEvent.ACTION_DOWN){ if(inCircle(arg1, radius, xCircle, yCircle){ //do whatever you wanna do here } } return false; } 

我正在使用ImageView作为我的圆形button,我需要对@ Daniel的代码进行一些更改,使其按照我想要的方式工作。 这是我的代码:

 private boolean mStillDown = false; public boolean inCircle(MotionEvent e, float radius, float x, float y) { float dx = e.getX() - x; float dy = e.getY() - y; double d = Math.sqrt((dx * dx) + (dy * dy)); if(d < radius) return true; return false; } @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); boolean inCircle = inCircle(event, getWidth()/2.0f, getWidth()/2.0f, getHeight()/2.0f); if(inCircle){ if(action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_DOWN){ this.setPressed(true); mStillDown = true; }else if(action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_POINTER_UP){ if(this.isPressed()){ this.performClick(); this.setPressed(false); mStillDown = false; } }else if(action == MotionEvent.ACTION_MOVE && mStillDown){ this.setPressed(true); } }else{ if(action == MotionEvent.ACTION_MOVE){ this.setPressed(false); }else if(action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_POINTER_UP || action == MotionEvent.ACTION_OUTSIDE){ mStillDown = false; } } return true; } 

希望这对某个人有用。