Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android進階:在地圖MapView中畫一個圖標並帶陰影效果

Android進階:在地圖MapView中畫一個圖標並帶陰影效果

編輯:Android開發實例

看看效果先

自己調試了一下午終於搞定了這裡來整理一下吧 直接上代碼吧

 

  1. Paint paint = new Paint();  
  2.             Point myScreenCoords = new Point();  
  3.             //轉換當前地圖位置到屏幕坐標點  
  4.             mv.getProjection().toPixels(gp1, myScreenCoords);  
  5.             paint.setStrokeWidth(1);  
  6.             paint.setARGB(255,255,0,0);  
  7.             paint.setStyle(Paint.Style.FILL);  
  8.             Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.icon001);  
  9.             canvas.save(Canvas.MATRIX_SAVE_FLAG);  
  10.             //加載兩次圖片資源  
  11.             Drawable drawable = getResources().getDrawable(R.drawable.icon001);  
  12.             //這裡調用mutate 做測試  
  13.             Drawable drawable1 = getResources().getDrawable(R.drawable.icon001).mutate();  
  14.             drawable.setBounds(myScreenCoords.x, myScreenCoords.y, myScreenCoords.x+drawable.getIntrinsicWidth(), myScreenCoords.y+drawable.getIntrinsicHeight());  
  15.             drawable1.setBounds(0, 0, drawable1.getIntrinsicWidth(), drawable1.getIntrinsicHeight());  
  16.             //位置的調節操作  
  17.             boundCenterBottom(drawable);  
  18.             drawable.draw(canvas);  
  19.             canvas.restore();  
  20.             canvas.save(Canvas.MATRIX_SAVE_FLAG);  
  21.             //顏色的過濾  
  22.             drawable1.setColorFilter(0x7f000000, PorterDuff.Mode.SRC_IN);  
  23.             //位移操作  
  24.             canvas.translate(myScreenCoords.x, myScreenCoords.y);  
  25.             //傾斜操作  
  26.             canvas.skew(-0.9F, 0.0F);  
  27.             //進行縮放  
  28.             canvas.scale(1.0F, 0.5F);  
  29.             boundCenterBottom(drawable1);  
  30.             drawable1.draw(canvas);  
  31.             //這裡清除顏色過濾   
  32.             drawable1.clearColorFilter();  
  33.             canvas.restore(); 

剛開始做的時候老是出現圖片本身和陰影的顏色都被過濾了 但是我僅僅是調用了drawable1 的顏色過濾方法

後來發現了資源狀態共享的問題

下面了解一下 mutate()方法

Make this drawable mutable. This operation cannot be reversed. A mutable drawable is guaranteed to not share its state with any other drawable. This is especially useful when you need to modify properties of drawables loaded from resources. By default, all drawables instances loaded from the same resource share a common state; if you modify the state of one instance, all the other instances will receive the same modification. Calling this method on a mutable Drawable will have no effect

大概就是改變當前資源狀態 變為活動的可變的 因為 drawable資源不管加載幾次 它的狀態是共享的,所以在改變一個對象的狀態的時候其它的引用到該資源的對象也會改變 所以讓drawable1調用該方法 鎖定這個對象調用的資源狀態

下面clearColorFilter()這個方法也是起到同樣的作用 可以解決這個問題

反正解決了就行了。。具體有什麼不同就不深究了

還有注意的就是 setBounds() 兩個設置的不同, 因為drawable1還要經過位移

中間還有個方法

 

  1. protected  Drawable boundCenterBottom(Drawable balloon) {  
  2.         int markerWidth=balloon.getIntrinsicWidth();  
  3.         int markerHeight=balloon.getIntrinsicHeight();  
  4.           
  5.         Rect srcRect=balloon.getBounds();  
  6.         srcRect.offset(-markerWidth/2, -markerHeight);  
  7.         balloon.setBounds(srcRect);  
  8.         return balloon;  
  9.     } 

就是移動位置到點坐標的正上方 圖標嘛 就是這個坐標的具體位置的解釋嘛 不能把它給覆蓋了

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved