2013-10-08 2 views
0

Je suis en train de tracer une ligne en pointillés comme séparateur pour un élément diviseur ListView, comme indiqué ici: enter image description hereComment dessiner une ligne pointillée REAL dans Android

Pour ce faire, dans l'un des cas j'ai la méthode substituée OnDraw() et utilisée:

paint.SetPathEffect(new DashPathEffect(new[] { 2f, 2f }, 0));

_paint.StrokeWidth = 2;

En utilisant DashPathEffect d OWS dessiner de petits points - mais ils ne sont pas des points - ils sont petits carrés plutôt que des points arrondis:

enter image description here

L'application est construit en utilisant MonoDroid sur le cadre de Xamarin

Toute pensée?

+0

essayer d'ajouter 'paint.setStrokeJoin (Paint.Join.ROUND)' et 'paint.setStrokeCap ​​(Paint.Cap.ROUND)' et ... –

+0

@M -WaJeEh lors de l'affectation de ceci: '_paint.SetPathEffect (new DashPathEffect (new [] {2f, 2f}, 0)); _paint.StrokeWidth = 2; _paint.StrokeCap ​​= Paint.Cap.Round; 'Je reçois une ligne pleine pleine .. toute autre suggestion de configuration? – 242Eld

Répondre

1

Si vous testez sur l'appareil avec le niveau de l'API> = 11 puis essayez setting layer type à LAYER_TYPE_SOFTWARE

+0

J'aurais pu faire cela mais j'ai besoin d'une solution qui supporte API> = 9 ... – 242Eld

+0

Juste envelopper le type de couche de réglage avec si comme ceci: '' 'si (Build.VERSION.SDK_INT> x)' '' – koral

+0

Sur API Le type de couche de niveau <11 est toujours un logiciel, donc rien ne devrait être fait dans de tels cas. En option, vous pouvez ajouter l'annotation "' '' @ TargetApi''' lint. – koral

1

cadre peinture

mPaint.setStyle(Paint.Style.STROKE); 
mPaint.setStrokeWidth(30); 
mPaint.setPathEffect(new DashPathEffect(new float[]{1, 60}, 0f)); 
mPaint.setStrokeCap(Paint.Cap.ROUND); 

exemple d'utilisation

canvas.drawPath(mPath, mPaint); 

MISE À JOUR

Il y a un autre moyen. Ici, vous pouvez définir absolument toute forme

paintBlue = new Paint(Paint.ANTI_ALIAS_FLAG); 
    float mRadius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, context.getResources().getDisplayMetrics()); 
    paintBlue.setStyle(Paint.Style.STROKE); 
    paintBlue.setAntiAlias(true); 
    paintBlue.setColor(Color.BLACK); 
    paintBlue.setStrokeWidth(12); 
    Path shapePath = new Path(); 
    shapePath.addCircle(0, 0, mRadius, Path.Direction.CCW); 
    PathDashPathEffect pathDashPathEffect = new PathDashPathEffect(shapePath, mRadius * 4, 0, PathDashPathEffect.Style.ROTATE); 
    paintBlue.setPathEffect(pathDashPathEffect); 
Questions connexes