我需要使用圆角和内部阴影制作缩略图。通常,我使用9个图片制作ImageView帧,这些帧已经很好地服务了我,但是这次我需要的效果需要在图像顶部绘制内部阴影(而不仅仅是围绕它)。这导致我扩展ImageView类并重写onDraw()方法。带有圆角和内部阴影的ImageView
public class ThumbnailImageView extends ImageView {
很多教程之后(!感谢StackOverflow的),我结束了这段代码的的onDraw()方法:
@Override
protected void onDraw(Canvas canvas) {
if (mBitmap == null) {
return;
}
int radius = 4;
int padding = 2;
int bleed = 2;
RectF frame = new RectF(padding, padding, getWidth() - padding, getHeight() - padding);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(0xFF000000);
canvas.drawRoundRect(frame, radius, radius, mPaint);
Shader bitmapShader = new BitmapShader(mBitmap, TileMode.CLAMP, TileMode.CLAMP);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(0xFF000000);
mPaint.setMaskFilter(new BlurMaskFilter(bleed, Blur.INNER));
mPaint.setShader(bitmapShader);
canvas.drawRoundRect(frame, radius, radius, mPaint);
}
我基本上做什么,先画一个黑色的圆角矩形然后在其上绘制带有渐变边缘的圆角位图(使用BlurMaskFilter)。结果是什么,我想: 的mBitmap值在ImageView的构造函数初始化这样的:
mDrawable = getDrawable();
if (mDrawable != null) {
mBitmap = ((BitmapDrawable) mDrawable).getBitmap();
}
的问题是,我重写的onDraw()完全(无super.onDraw())被调用,所以我必须预先缩放所有图像到所需的缩略图大小(例如96x96),否则只绘制图像的左上角。我希望能够做的是利用所有的缩放的时候我给你以下XML值,ThumbnailImageView框架正在做的优势:
android:id="@+id/thumb"
android:layout_width="96dp"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
要做到这一点,我想我应该以某种方式实现super.onDraw (),同时获得我需要的效果。我设法通过向画布添加剪切路径来获得圆角矩形,但我无法找到添加内部阴影的方法。这是新的onDraw()代码:
@Override
protected void onDraw(Canvas canvas) {
int radius = 4;
int padding = 4;
RectF frame = new RectF(padding, padding, getWidth() - padding, getHeight() - padding);
Path clipPath = new Path();
clipPath.addRoundRect(frame, radius, radius, Path.Direction.CW);
canvas.clipPath(clipPath);
super.onDraw(canvas);
// add inner shadow
}
我可以看到两个选择:
1)要正确预规模的ImageView位图。但是,最好的地方在哪里呢?在它的构造函数?在框架似乎在做的onDraw()方法?该框架是否调整了任何位图的大小,还是有另一种方法在画布上绘制缩放图像而不会影响性能?
2)在super.onDraw()所绘制的内容上添加内部阴影图层,但是我已经没有想法了解如何做到这一点。
任何帮助,将不胜感激。
谢谢!
+1的一个非常有用的链接:) – Wesley 2012-07-04 10:37:24
这里是链接到视频http://www.youtube.com/watch?v=jF6Ad4GYjRU – mykola 2012-09-30 11:09:51
@mykola OMG。你摇滚。感谢您的链接! – petey 2012-10-01 13:46:47