2013-11-24 18 views
11

ShapeDrawable'ı genişleterek programlı bir şekilde yuvarlak köşeleri olan bir kenarlık oluşturmam gerekiyor. Yuvarlatılmış köşeleri olan siyah bir kenarlığa sahip olmalı, dış taraftaki pikseller beyaz ve iç pikseller şeffaf. Şu anda sahip olduğum kodun birden fazla problemi var, ki bu sınırla aynı kalınlıkta ve kenarın dış piksellerinin saydam ve beyaz olmaması için düzgün bir köşe oluşturmuyor.Android'de ShapeDrawable kullanarak programlı olarak yuvarlak köşeli bir kenarlık nasıl oluşturulur?

public class CustomShape extends ShapeDrawable { 
private final Paint fillpaint, strokepaint; 
public CustomShape(int fill, int strokeWidth,int radius) { 

    super(new RoundRectShape(new float[] { radius, radius, radius, radius, radius, radius, radius, radius }, null, null)); 
    fillpaint = new Paint(this.getPaint()); 
    fillpaint.setColor(fill); 
    strokepaint = new Paint(fillpaint); 
    strokepaint.setStyle(Paint.Style.STROKE); 
    strokepaint.setStrokeWidth(strokeWidth); 
    strokepaint.setColor(Color.BLACK); 
} 



@Override 
protected void onDraw(Shape shape, Canvas canvas, Paint paint) { 
    shape.draw(canvas, fillpaint); 
    shape.draw(canvas, strokepaint); 
} 

}

+0

çekilebilir genişletmeye çalıştığımız yöntem setCornerRadii() kullanabilir DIMENS yuvarlak köşe belirtmek için ShapeDrawable yerine (ve özel bir dtaw)? – pskink

cevap

0
: Burada

köşeleri Şu anda burada

corner Kurucuda 'dolgu' için Color.TRANSPARENT geçirerek kodu alıyorum resmidir

Özel bir çekilebilir uygulayabilirsiniz. Aşağıdaki xml örneğidir.

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#ffffffff"/>  

    <stroke android:width="3dp" 
      android:color="#ff000000" 
      /> 

    <padding android:left="1dp" 
      android:top="1dp" 
      android:right="1dp" 
      android:bottom="1dp" 
      /> 

    <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp" 
    android:topLeftRadius="7dp" android:topRightRadius="7dp"/> 
</shape> 

Bu xml projenizin çizilebilir klasörüne kaydedin. Şimdi herhangi bir widget için normal çekilebilir gibi kullanın. Örneğin: android: background = "R.drawable.round_shape"

Bu örnekte şu link izleniyor. sadece

GradientDrawable gd = new GradientDrawable(); 
gd.setColor(Color.RED); 
gd.setCornerRadius(10); 
gd.setStroke(2, Color.WHITE); 

view.setBackground(gd); 

GradientDrawable belgeler here bulunabilir tek renkle GradentDrawable kullanabilirsiniz

13

Eğer gerekiyorsa eşit yuvarlak köşeler (ve örnekten sen de yapmak görünüyor).

Düzenleme: Her köşe için ayrı ayrı

ayrı ayrı setCornerRadii (float[] radii) yöntemi kullanılarak her bir köşesinde yarıçapını belirtebilirsiniz. "Her köşe için, dizi 2 değer içerir, [X_radius, Y_radius]. Köşeler üst sol, sağ üst, sağ alt, sol alt olarak düzenlenir. Bu özellik, yalnızca şekil DIKDÖRTGEN olduğunda onurlandırılır.

özellik değiştirmeden önce mutate() çağırmak için tavsiye edilir. Buna ek olarak

+0

leftCornerRadius ve rightCornerRadius'u belirleme olanağı var mı? – Chandru

+0

ek olarak her köşe ayrı ayrı yuvarlanabilir nasıl bir not ekledi – SGal

0

Eğer GradientDrawable ve

GradientDrawable d = new GradientDrawable(); 
d.setCornerRadii({5.0f,5.0f,5.0f,5.0f}); 
textViewExample.setBackgroundResource(d); 
0
GradientDrawable drawable = (GradientDrawable)image.getBackground(); 
drawable.setGradientRadius(radiuspx); 
İlgili konular