2010-06-03 18 views
11

Android'de 2B grafik tutmaya çalışıyordum. i özel çekilebilir uygulamak ve ben almaya çalışıyorumAndroid'de özelleştirilmiş bir çizim yapılabilir

class myDrawable extends Drawable { 

    private static final String TAG = myDrawable.class.getSimpleName(); 
    private ColorFilter cf; 
    @Override 
    public void draw(Canvas canvas) { 


    //First you define a colour for the outline of your rectangle 

    Paint rectanglePaint = new Paint(); 
    rectanglePaint.setARGB(255, 255, 0, 0); 
    rectanglePaint.setStrokeWidth(2); 
    rectanglePaint.setStyle(Style.FILL); 

    //Then create yourself a Rectangle 
    RectF rectangle = new RectF(15.0f, 50.0f, 55.0f, 75.0f); //in pixels 


    Log.d(TAG,"On Draw method"); 
    // TODO Auto-generated method stub 
    Paint paintHandl = new Paint(); 
    // paintHandl.setColor(0xaabbcc); 
    paintHandl.setARGB(125, 234, 213, 34); 
    RectF rectObj = new RectF(5,5,25,25); 
    canvas.drawRoundRect(rectangle, 0.5f, 0.5f, rectanglePaint); 

    } 

    @Override 
    public int getOpacity() { 
    // TODO Auto-generated method stub 
    return 100; 
    } 

    @Override 
    public void setAlpha(int alpha) { 
    // TODO Auto-generated method stub 
    } 

    @Override 
    public void setColorFilter(ColorFilter cf) { 
    // TODO Auto-generated method stub 
    this.cf = cf; 
    } 
} 

aşağıda belirtildiği gibi

Ben Android çekilebilir uzanan bir özelleştirilmiş çekilebilir tanımladık benim Aktivite bunu göstermek istiyorum bir örnek olarak bu görüntülenen Etkinliğimi olarak

public class custDrawable extends Activity { 
/** Called when the activity is first created. */ 


LinearLayout layObj = null; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     layObj = (LinearLayout) findViewById(R.id.parentLay); 
     ImageView imageView = (ImageView) findViewById(R.id.icon2); 
     myDrawable myDrawObj = new myDrawable(); 
     imageView.setImageDrawable(myDrawObj); 
     imageView.invalidate(); 
// layObj.addView(myDrawObj, params); 

    } 
} 

aşağıda gösterildiği Ama ben aktivitesi üzerinde hiçbir dikdörtgen bkz uygulamayı çalıştırdığınızda, kimse bana yardımcı olabilir? Nerede yanlış gidiyorum?

cevap

11

Sorununuz, getOpacity() yönteminde. 100 geçerli bir değer değil. PixelFormat değerini kullanmalısınız. Ayrıca, yapıcıda RectF ve Paint'u oluşturmalısınız ve ardından draw()'daki değerleri ayarlamalısınız, böylece çöp toplanması gereken çok fazla nesne oluşturmazsınız. Şunun gibi:

public class Square extends Drawable 
{ 
    private final Paint mPaint; 
    private final RectF mRect; 

    public Square() 
    { 
     mPaint = new Paint(); 
     mRect = new RectF(); 
    } 

    @Override 
    public void draw(Canvas canvas) 
    { 
     // Set the correct values in the Paint 
     mPaint.setARGB(255, 255, 0, 0); 
     mPaint.setStrokeWidth(2); 
     mPaint.setStyle(Style.FILL); 

     // Adjust the rect 
     mRect.left = 15.0f; 
     mRect.top = 50.0f; 
     mRect.right = 55.0f; 
     mRect.bottom = 75.0f; 

     // Draw it 
     canvas.drawRoundRect(mRect, 0.5f, 0.5f, mPaint); 
    } 

    @Override 
    public int getOpacity() 
    { 
     return PixelFormat.OPAQUE; 
    } 

    @Override 
    public void setAlpha(int arg0) 
    { 
    } 

    @Override 
    public void setColorFilter(ColorFilter arg0) 
    { 
    } 
} 
+0

değişiklikler casey tarafından belirtilen, ancak hala benim görüşüme çizilen herhangi bir geçerli şeyi göremiyorum. – Girish

+0

Nother problemi, 'ImageView' öğesini asla 'LinearLayout' öğesine eklemediğiniz görülüyor. 'LayCr() Viewer = 'in – CaseyB

+0

sonuna' LayObj.addView (imageView);' eklemek gerekir. ImageView doğrusal düzen ekledim, temelde set sınırları olan bir sorun xml olarak, ben genişlik ve yükseklik kodladım görüntü görünümü, şimdi gösteriyor, bu yüzden benim setBounds ile bazı sorun nedir? – Girish

0

Sen getIntrinsicWidth() ve getIntrinsicHeight gibi diğer geçersiz kılmaları uygulamak gerekebilir(). Söylemenin bir yolu, layout_width ve layout_height öğelerinizi XML'de sabit (layout_width = "42dip" layout_height = "42dip") veya Java düzenlerini kullanıyorsanız layoutParams'ınızı bir değer olarak ayarlamanızdır. Bazı Görünüm türleri, getIntrinsic * uygulamasının diğerlerinden daha fazla kullanılmamasını sağlar, bu yüzden onları deneyin! Bu, düz bir Görünüm

İçerir Belirli bir genişlik veya yükseklik yoksa -1 döndürmeyi deneyebilirsiniz. Sorun hiç çözüldü var ise

Sabit

anlatmak ama Google kendimi özel çekilebilir yapma detayları hatırlamak yardım etmeye çalışıyorum aracılığıyla burada var, artı kişiler bu önlemeye yardımcı istiyorum: http://xkcd.com/979/ yaptım

İlgili konular