使用onDraw扩展android按钮
我想更改我的按钮形状,但我想使用onDaw方法和扩展按钮 班级。所以我刚开始做的是:使用onDraw扩展android按钮,android,android-view,android-custom-view,android-button,Android,Android View,Android Custom View,Android Button,我想更改我的按钮形状,但我想使用onDaw方法和扩展按钮 班级。所以我刚开始做的是: <view class = "com.example.button.MainActivity$MyButton" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 但我在按钮视图矩形上有一个蓝色圆圈 我想把蓝色的圆圈看作一个按钮形状,然后我就可以看到矩形了。 有
<view class = "com.example.button.MainActivity$MyButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
但我在按钮视图矩形上有一个蓝色圆圈
我想把蓝色的圆圈看作一个按钮形状,然后我就可以看到矩形了。
有什么帮助吗?在xml中将背景设置为透明(就像上面所说的那样),并覆盖onTouchListener,这样只有在单击蓝色圆圈时,单击才有效 setOnTouchListener可控制单击位置是否在蓝色圆圈内。你可以得到像这样的触摸位置 您甚至可以通过以下方式设置onClickListener(将其添加到MyButton类):
您忘记了super.onDraw(canvas)调用。是的,但仍然存在相同的问题。在这方面我可能有点离题,但请尝试将xml背景设置为透明。实际上,这是我项目的主要思想,如果我将按钮的背景更改为透明,在圆圈周围单击可能会调用按钮单击方法。您的getWidth和getHeight方法是错误的。使用canvas.getWidth和canvas.getHeightGood,但是如果我的形状有点复杂,我应该怎么做才能找到答案,例如五角大楼之类的东西。找到好的规则来检查任何点是否被它包围是很困难的。我认为除非你能够更精确地定义你的形状(例如,说明什么样的函数构建你的形状的边,并将它们与触摸事件的坐标进行比较),那么android本身只能给你一个包含你的形状的矩形。我的形状是由路径构建的。我走在我形状的边缘上。
public static class MyButton extends Button {
public MyButton(Context context) {
super(context);
}
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStrokeWidth(10);
paint.setStyle(Style.FILL);
int width = getWidth();
int height = getHeight();
canvas.drawCircle(width/2, height/2, height/3, paint);
}
}
@Override
public void setOnClickListener(final OnClickListener onClickListener) {
MyButton.this.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event){
if (isWithinCircle(event))
{
onClickListener.onClick(v);
}
}
});
}