Özel bir View
numaralı hattında bir çizgi çizmeye çalışıyorum. Burada, sadece PathShape
nolu tek bir parça ile basit bir Path
yarattım ve bunun için ShapeDrawable
içine içine yapıştırıp onDraw()
içinde Canvas
içine çizim yapmak niyetindeyim. Ancak, bu işe yaramıyor. Örneğime bakın.Özel bir Görünüm üzerinde bir çizgi çizmek için bir PathShape ile ShapeDrawable'ı nasıl kullanmanız gerekir?
package com.example.test;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.PathShape;
import android.util.Log;
import android.view.View;
public class TestView extends View {
private Path mPath = null;
private Paint mPaint = null;
private PathShape mPathShape = null;
private ShapeDrawable mShapeDrawable = null;
public TestView(Context context) {
super(context);
}
private void init() {
int width = this.getWidth()/2;
int height = this.getHeight()/2;
Log.d("init", String.format("width: %d; height: %d", width, height));
this.mPath = new Path();
this.mPath.moveTo(0, 0);
this.mPath.lineTo(width, height);
this.mPaint = new Paint();
this.mPaint.setColor(Color.RED);
this.mPathShape = new PathShape(this.mPath, 1, 1);
this.mShapeDrawable = new ShapeDrawable(this.mPathShape);
this.mShapeDrawable.getPaint().set(this.mPaint);
this.mShapeDrawable.setBounds(0, 0, width, height);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
// Doing this here because in the constructor we don't have the width and height of the view, yet
this.init();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Log.d("onDraw", "Drawing");
// This works, but won't let me do what I'm really trying to do
canvas.drawLine(0.0f, 0.0f, this.getWidth()/2.0f, this.getHeight()/2.0f, this.mPaint);
// This should work, but does not
//this.mPathShape.draw(canvas, this.mPaint);
// This should work, but does not
//this.mShapeDrawable.draw(canvas);
}
}
Eğer onDraw()
yöntemde benim yorumlardan görebileceğiniz gibi, ne PathShape
ne de ShapeDrawable
kullanılarak Canvas
üzerine Path
gerçekten çalışan çizmek. Denediğimde hiçbir şey çizilmez. Neden olduğu hakkında bir fikri olan var mı?
Bunu test ettiğim cihaz Android 4.1.1 çalıştırıyor.
Sadece meraklı - onDraw içinde yeni bir Paint nesnesi oluşturmayı denediniz. Bunu yapıyorum ve bitmapler ile başarıya ulaşıyorum ama gerekli olup olmadığından emin değildim. – JavaCoderEx
OnDraw'da nesne oluşturmak istemediğimden beri yoktu (aslında Lint'ten uyarı veriyor). Ancak, şimdi denedim ve aynı sonuçları aldım. Başarı yok. – Daniel
Daha fazla araştırma ve burada yanıt eksikliğinden sonra, bunun sadece kırılmış olduğunu ve bir hata raporu sunduğumu düşünüyorum. http://code.google.com/p/android/issues/detail?id=35229 – Daniel