我需要使用圓角和內部陰影製作縮略圖。通常,我使用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