好的,我知道这个问题在不同的问题中有所涉及,但我在这里尝试不同的方法。
这是我的自定义View类:
public class MyView extends View {
Button mButton;
public MyView(Context context) {
super(context);
mButton = new Button(context);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//Sets the size needed.
}
@Override
protected void onDraw(Canvas canvas) {
canvas.save();
//Draws some graphics.
canvas.restore();
canvas.save();
RectF boundRect = new RectF(left,top,right,bottom);
canvas.clipRect(boundRect);
mButton.layout(0,0,canvas.getWidth(),canvas.getHeight());
mButton.draw(canvas);
canvas.restore();
}
}
这会以正确的位置和大小绘制按钮,但是,按钮看起来是透明的一半而且无法点击。有谁知道为什么以及如何解决它?
答案 0 :(得分:0)
您是否在Activity中设置了OnClickListener? 您的视图未显示已单击,因为您没有为点击状态设置不同的样式。 在drawable文件夹中创建一个新的xml文件,例如black_button_style:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape>
<solid
android:color="#343434" />
<stroke
android:width="1dp"
android:color="#171717" />
<corners
android:radius="3dp" />
<padding
android:left="3dp"
android:top="10dp"
android:right="3dp"
android:bottom="10dp" />
</shape>
</item>
<item>
<shape>
<gradient
android:startColor="#343434"
android:endColor="#171717"
android:angle="270" />
<stroke
android:width="1dp"
android:color="#171717" />
<corners
android:radius="4dp" />
<padding
android:left="3dp"
android:top="10dp"
android:right="3dp"
android:bottom="10dp" />
</shape>
</item>
在xml-layout文件中设置视图的背景:
android:background="@drawable/black_button_style"
答案 1 :(得分:0)
我不知道是否有人关注此事,但我认为将问题保持开放是不对的。 您似乎可以直接扩展View类,但您还必须实现ViewGroup实现的一些接口:
这将使按钮可以点击。
我还发现透明度来自默认的ICS Holo Dark主题,所以按钮有点透明的事实是可取的。
最终,我不想重新发明轮子,我选择扩展ViewGroup而不是View。