几天来,我尝试在Android中实现一个简单的Imagebutton,使用动态LinearGradient作为背景。我想要android.R.drawable.btn_default的基本设计,它从按钮的左边缘开始着色到从v = 0-100%(右边缘)以百分比给出的值。按钮左右两侧之间的边缘应该是清晰的(如均衡器)。对于没有NullException错误的任何建议,我将非常感谢!
编辑29.07.14
以下是代码段,正常运行:
Drawable dr = getResources().getDrawable(android.R.drawable.btn_default);
Bitmap bitmap = Bitmap.createBitmap(dr.getIntrinsicWidth(), dr.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
dr.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
dr.draw(canvas);
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(Mode.MULTIPLY));
paint.setShader(new LinearGradient(0, 0, canvas.getWidth()*7*vol, 0, new int[] { Color.GREEN, Color.TRANSPARENT }, new float[] { 0, 1 }, Shader.TileMode.CLAMP));
canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), paint);
mButtonSpeech.setBackground(new BitmapDrawable(getResources(), bitmap));
但即使没有我的代码的中间部分,将渐变添加到画布,按钮背景看起来并不像我期望的那样(它是小的,在中心没有像其他按钮那样着色,我设置了背景:
mButtonDraw.setBackgroundResource(android.R.drawable.btn_default);
如果我还将Paint绘制到Canvas中,我会期望默认的按钮背景,在左侧部分着色,就像我可以使用setColorFilter()一样。