android阴影图像效果

时间:2011-03-18 08:29:10

标签: android image effect shadow

我正在尝试添加阴影效果做一个图像。我使用蒙版来绘制图像(我的图像需要特定的形状)。你能告诉我如何为我的图像添加阴影效果吗?我尝试过类似paint.setShadowLayer(10,10,10,Color.RED)的东西,但它没有用。这是源代码:

 @Override
public void draw(Canvas canvas) {
    Rect rect = new Rect(0, 0, getWidth() - 1, getHeight() - 1);
    NinePatchDrawable mask = (NinePatchDrawable) getContext().getResources().getDrawable(maskResId);
    mask.setBounds(rect);
    Bitmap content = Bitmap.createBitmap(rect.width(), rect.height(), Bitmap.Config.ARGB_8888);
    Canvas contentCanvas = new Canvas(content);
    super.draw(contentCanvas);
    Paint paint = new Paint();
    paint.setXfermode(new AvoidXfermode(Color.BLACK, 255, AvoidXfermode.Mode.TARGET));
    mask.draw(canvas);
    canvas.drawBitmap(content, null, rect, paint);
}

1 个答案:

答案 0 :(得分:2)

我的解决方案:

类ShadowImage

public class ShadowImage extends BitmapDrawable {

Bitmap bm;
static float shadowRadius = 4f;
static PointF shadowDirection = new PointF(2f, 2f);
int fillColor = 0;

@Override
public void draw(Canvas canvas) {

    Rect rect = new Rect(0, 0, bm.getWidth(), bm.getHeight());
    Log.i("TEST", rect.toString());
    setBounds(rect);

    Paint mShadow = new Paint();
    mShadow.setAntiAlias(true);
    mShadow.setShadowLayer(shadowRadius, shadowDirection.x, shadowDirection.y, Color.BLACK);

    canvas.drawRect(rect, mShadow);
    if(fillColor != 0) {
        Paint mFill = new Paint();
        mFill.setColor(fillColor);
        canvas.drawRect(rect, mFill);
    }
    canvas.drawBitmap(bm, 0.0f, 0.0f, null);

}

public ShadowImage(Resources res, Bitmap bitmap) {
    super(res, Bitmap.createScaledBitmap(bitmap, (int) (bitmap.getWidth()+shadowRadius*shadowDirection.x), (int) (bitmap.getHeight()+shadowRadius*shadowDirection.y), false));
    this.bm = bitmap;
}
public ShadowImage(Resources res, Bitmap bitmap, int fillColor) {
    super(res, Bitmap.createScaledBitmap(bitmap, (int) (bitmap.getWidth()+shadowRadius*shadowDirection.x), (int) (bitmap.getHeight()+shadowRadius*shadowDirection.y), false));
    this.bm = bitmap;
    this.fillColor = fillColor;
}

}

的活动:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    LinearLayout root = (LinearLayout) findViewById(R.id.root_layout);

    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
    ShadowImage image = new ShadowImage(getResources(), bmp);
    ShadowImage image2 = new ShadowImage(getResources(), bmp, Color.WHITE);

    ImageView iv_normal = new ImageView(getApplicationContext());
    iv_normal.setPadding(10, 10, 10, 10);
    iv_normal.setImageBitmap(bmp);

    ImageView iv_shadow = new ImageView(getApplicationContext());
    iv_shadow.setPadding(10, 10, 10, 10);
    iv_shadow.setImageDrawable(image);

    ImageView iv_fill = new ImageView(getApplicationContext());
    iv_fill.setPadding(10, 10, 10, 10);
    iv_fill.setImageDrawable(image2);

    LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    root.addView(iv_normal, params);
    root.addView(iv_shadow, params);
    root.addView(iv_fill, params);
    root.setGravity(Gravity.CENTER);
}

图片:Screenshot