2011-08-29 16 views
8

मैं प्रोग्राम के रूप में एक बिटमैप बनाने के लिए कोशिश कर रहा हूँ और ड्राइंग कोई छायांकित रेक्ट रंग आर्ग में पारित अनदेखी कर रहा है लग रहा है के रंग पर ध्यान नहीं देता मैं इस मामले के लिए नीचे सरलीकृत बातें है -। सिर्फ कोड एक घुमाया नीले वर्ग जो एक ग्रे छाया है माना जाता है छोड़ता है, लेकिन छाया हमेशा नीले रंग की है:एंड्रॉयड पेंट setShadowLayer() ने अपनी पेंट

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

मैं नहीं दिख रहा है यही कारण है कि outerCanvas.drawBitmap (innerBm, 0 करने के लिए कॉल, 0, shadowPaint); के बाद से मैं, innerBm पर ही छाया आकर्षित करने के लिए कोशिश कर रहा हूँ innerCanvas के माध्यम से सब पर एक पेंट की जरूरत है,, लेकिन जब मैं में अशक्त पारित वहाँ सब पर कोई छाया है।

+0

अतिरिक्त जानकारी: इस प्रयास करें एक दूसरा पेंट ड्रा के समय के दौरान आवंटन को रोकने के लिए लैग (यूआई धागा) आदि – bluewhile

उत्तर

4

आप अपने भीतर बिटमैप बहुत छोटा बना दिया है और यह rectange के किनारों custs। बस के रूप में

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

यह है कि करने के लिए नेतृत्व हो सकता है प्रयोग किया जाता है! धन्यवाद... –

संबंधित मुद्दे