2011-08-29 33 views
8

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); 
    } 
} 

RotateRectShadow

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ả.

+0

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

Trả lời

4

Bạn đã làm cho bitmap bên trong của bạn quá nhỏ và nó sẽ điều chỉnh các cạnh của mặt bích. Hãy thử điều này:

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.setColor(Color.BLUE);; 
    shadowPaint.setShadowLayer(12, 12, 12, 0xFF555555); 

    innerCanvas.drawRect(rect, shadowPaint); 

    outerCanvas.drawBitmap(innerBm, 0, 0, null); 
+0

Đúng rồi! Cảm ơn... –

Các vấn đề liên quan