Được rồi, tôi đã đọc và tìm kiếm xung quanh, và bây giờ tôi đang đập đầu vào tường để cố gắng tìm ra điều này. Đây là những gì tôi có cho đến nay:
package com.pockdroid.sandbox;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.widget.ImageView;
public class ShadowImageView extends ImageView {
private Rect mRect;
private Paint mPaint;
public ShadowImageView(Context context)
{
super(context);
mRect = new Rect();
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setShadowLayer(2f, 1f, 1f, Color.BLACK);
}
@Override
protected void onDraw(Canvas canvas)
{
Rect r = mRect;
Paint paint = mPaint;
canvas.drawRect(r, paint);
super.onDraw(canvas);
}
@Override
protected void onMeasure(int w, int h)
{
super.onMeasure(w,h);
int mH, mW;
mW = getSuggestedMinimumWidth() < getMeasuredWidth()? getMeasuredWidth() : getSuggestedMinimumWidth();
mH = getSuggestedMinimumHeight() < getMeasuredHeight()? getMeasuredHeight() : getSuggestedMinimumHeight();
setMeasuredDimension(mW + 5, mH + 5);
}
}
"+5" trong các phép đo ở đó là tạm thời; Từ những gì tôi hiểu, tôi sẽ cần thực hiện một số phép toán để xác định kích thước mà bóng đổ thêm vào canvas, phải không?
Nhưng khi tôi sử dụng cái này:
public View getView(int position, View convertView, ViewGroup parent) {
ShadowImageView sImageView;
if (convertView == null) {
sImageView = new ShadowImageView(mContext);
GridView.LayoutParams lp = new GridView.LayoutParams(85, 85);
sImageView.setLayoutParams(lp);
sImageView.setScaleType(ImageView.ScaleType.CENTER);
sImageView.setPadding(5,5,5,5);
} else {
sImageView = (ShadowImageView) convertView;
}
sImageView.setImageBitmap(bitmapList.get(position));
return sImageView;
}
trong ImageView của mình, tôi vẫn chỉ nhận được ImageView bình thường khi chạy chương trình.
Có suy nghĩ gì không? Cảm ơn.
CHỈNH SỬA: Vì vậy, tôi đã nói chuyện với RomainGuy một số trong kênh IRC và bây giờ tôi đã làm việc với các hình ảnh hình chữ nhật đơn giản với mã bên dưới. Mặc dù vậy, nó vẫn sẽ không vẽ bóng trực tiếp đến độ trong suốt của bitmap của tôi, vì vậy tôi vẫn đang làm việc trên đó.
@Override
protected void onDraw(Canvas canvas)
{
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.omen);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setShadowLayer(5.5f, 6.0f, 6.0f, Color.BLACK);
canvas.drawColor(Color.GRAY);
canvas.drawRect(50, 50, 50 + bmp.getWidth(), 50 + bmp.getHeight(), paint);
canvas.drawBitmap(bmp, 50, 50, null);
}