Tôi đang cố gắng tạo một Bitmap lập trình và tìm thấy vẽ một Rect bóng là bỏ qua màu arg thông qua in Tôi đã đơn giản hóa những điều xuống trường hợp này - mã chỉ vẽ một hình vuông màu xanh xoay mà là phải có một cái bóng màu xám, nhưng cái bóng luôn luôn là màu xanh:Android Paint setShadowLayer() bỏ qua màu sắc của nó Sơn
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#fff"
android:padding="40dp"
>
</LinearLayout>
RotateRectShadowActivity.java:
public class RotateRectShadowActivity extends Activity {
private LinearLayout mMainLayout;
private ImageView mImageView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater factory = LayoutInflater.from(this);
mMainLayout = (LinearLayout) factory.inflate(R.layout.main, null);
mImageView = new ImageView(this);
Rect rect = new Rect(0, 0, 300, 300);
Bitmap outerBm = Bitmap.createBitmap(
rect.width(), rect.height(), Bitmap.Config.ARGB_8888);
Bitmap innerBm = Bitmap.createBitmap(
rect.width()-50, rect.height()-50, Bitmap.Config.ARGB_8888);
Canvas outerCanvas = new Canvas(outerBm);
Canvas innerCanvas = new Canvas(innerBm);
outerCanvas.rotate(3);
rect.left += 25;
rect.top += 25;
rect.right += 25;
rect.bottom += 25;
Paint shadowPaint = new Paint();
shadowPaint.setShadowLayer(12, 12, 12, 0xFF555555);
shadowPaint.setColor(0xFF555555);
innerCanvas.drawRect(rect, shadowPaint);
Paint rectPaint = new Paint();
rectPaint.setColor(Color.BLUE);
innerCanvas.drawRect(rect, rectPaint);
outerCanvas.drawBitmap(innerBm, 0, 0, shadowPaint);
mImageView.setImageBitmap(outerBm);
mMainLayout.addView(mImageView);
setContentView(mMainLayout);
}
}
tôi không thấy lý do tại sao các cuộc gọi đến outerCanvas.drawBitmap (innerBm, 0, 0, shadowPaint); cần một Paint ở tất cả, vì tôi đang cố gắng vẽ bóng trên innerBm, thông qua innerCanvas, nhưng khi tôi vượt qua null thì không có bóng nào cả.
Cũng giống như thông tin bổ sung: Sơn thứ hai được sử dụng để ngăn phân bổ trong thời gian vẽ có thể dẫn đến độ trễ (Giao diện người dùng) v.v. – bluewhile