2012-08-26 45 views
5

Tôi có tới drawable XML blue_buttonAndroid XML drawable góc tròn với bitmap thẻ

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
    <layer-list> 
     <item><bitmap android:src="@drawable/button_blue_bg" /> 
     </item> 
     <item > 
     <shape> 
       <corners android:radius="50dip" /> 
       <stroke android:width="1dip" android:color="#ccffffff" /> 
       <solid android:color="#00000000" /> 
       <padding android:bottom="3dip" 
         android:left="3dip" 
         android:right="3dip" 
         android:top="3dip" /> 
     </shape> 
     </item> 
    </layer-list> 
    </item> 
</selector> 

Và tôi có button_blue_bg hình ảnh với độ dốc với chiều rộng 1px.

Khi tôi đặt nền nút tôi nhận được hình ảnh tiếp theo

enter image description here

Như bạn thấy tôi có nền không cắt bớt với biên giới tròn.

Làm thế nào tôi cần xml modificate cho hình nền gradient không nằm ngoài biên giới?

Tôi hiểu lý do tại sao nó vui vẻ, bởi vì tôi sử dụng lớp - vì vậy điều này giống như sandwich- nhưng tôi cũng lập trình trên mục tiêu c, và ở đó nó cũng sử dụng các lớp. Nhưng trong Apple nó wotks tốt.

Trả lời

4

tôi sử dụng này .... Lần đầu tiên một lớp cho các định nghĩa cơ bản, thiết lập layer này là backgound của bố trí của bạn:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
     <stroke android:width="0.2dp" android:color="@color/anycolor" /> 
     <corners android:radius="10dp" > </corners> 
    </shape> 
    </item> 
    <item> 
     <bitmap android:src="@drawable/imgback" /> 
    </item> 
</layer-list> 

tôi sử dụng này chức năng để làm tròn góc:

public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) { 

     Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
      bitmap.getHeight(), Config.ARGB_8888); 
     Canvas canvas = new Canvas(output); 

     final int color = 0xff424242; 
     final Paint paint = new Paint(); 
     final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
     final RectF rectF = new RectF(rect); 
     final float roundPx = 12; 

     paint.setAntiAlias(true); 
     canvas.drawARGB(0, 0, 0, 0); 
     paint.setColor(color); 
     canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 

     paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
     canvas.drawBitmap(bitmap, rect, rect, paint); 

     return output ; 
     }  

và cuối cùng, các mã trong hoạt động:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.menu); 
    // i use a Relative Layout 
    RelativeLayout rl = (RelativeLayout) findViewById(R.id.rlmenu); 
    // Obtain then backgroud of RelativeLayout 
    LayerDrawable layer = (LayerDrawable) rl.getBackground(); 
    // obtain the image set in the Layer 
    BitmapDrawable bg = (BitmapDrawable) layer.getDrawable(1); 
    // create a new BitmapDrawable from the function 
    Drawable d =new BitmapDrawable(getRoundedCornerBitmap(bg.getBitmap())); 
    // set the new roundcorner image in the layer 
    layer.setDrawableByLayerId(1, d); 
    rl.setBackgroundDrawable(d); 

} 
+0

Nó không hoạt động với RelativeLayout và ImageView –

0

Một 9-patch sẽ được hoàn hảo cho tình hình của bạn

+1

Không, không. Vì nhiều lý do như: sau đó tôi không thể đặt góc biến của góc; tôi cũng sử dụng bg_img này ở hai nơi nữa, vì vậy nếu tôi sử dụng 9-patch - tôi cần everytimes sử dụng kiểm soát rounder, nhưng tôi có những nơi mà tôi không cần góc tròn nhưng tôi cần bg này; cũng kích thước và số lượng hình ảnh. –