Na poniższym widoku niestandardowego: Jeśli szerokość skok wynosi 0,01, a następnie w Android M i i pre-M Urządzenia (ex: lizak)Android M: Płótno strokeWidth i strokeStyle problem podczas łuki rysunek
Jeżeli jednak szerokość udar jest 0.0f następnie w M i Android i urządzeń pre-M (ex: lizak)
Czy istnieją zmiany w szerokości skoku w Android M, które powinny być brane pod uwagę? Czy istnieje zależność między stylem obrysu a szerokością obrysu?
plik XML układ:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<com.example.testspeedtestgui.TestView
android:id="@+id/testView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
/>
</RelativeLayout>
Kod, który implementuje speedometer.java przedstawiono poniżej:
package com.example.testspeedtestgui;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;
public class TestView extends View {
private Paint outerLogoPaint;
private Paint centerOuterPaint;
private Path outerLogoEdge;
public TestView(Context context) {
super(context);
init(context);
}
public TestView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public TestView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
private void init(Context context) {
if(Build.VERSION.SDK_INT >= 11){
this.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
initDrawingTools();
}
private void initDrawingTools() {
float strokeWidth=0.01f;
centerOuterPaint=new Paint();
centerOuterPaint.setAntiAlias(true);
centerOuterPaint.setColor(Color.BLUE);
centerOuterPaint.setStrokeWidth(strokeWidth);
centerOuterPaint.setStrokeCap(Paint.Cap.ROUND);
centerOuterPaint.setStyle(Paint.Style.STROKE);
RectF rect = new RectF();
float angle = getSemicircle(0.025f,0.5f,0.975f,0.5f,rect);
outerLogoEdge = new Path();
outerLogoEdge.moveTo(0.025f, 0.495f);
outerLogoEdge.arcTo(rect, angle, 180);
outerLogoEdge.moveTo(0.025f, 0.495f);
outerLogoEdge.lineTo(0.2f, 0.495f);
//Edge surrounding the lower part of outer semi circle(Logo edge Init) Logo edge Init
angle = getSemicircle(0.20f,0.5f,0.80f,0.5f,rect);
outerLogoEdge.arcTo(rect, angle, 180);
outerLogoEdge.moveTo(0.975f, 0.495f);
outerLogoEdge.lineTo(0.8f, 0.495f);
}
@Override
protected void onDraw(Canvas canvas) {
float scale = getWidth();
canvas.save(Canvas.MATRIX_SAVE_FLAG);
canvas.scale(scale, scale);
drawLogo(canvas);
canvas.restore();
}
private void drawLogo(Canvas canvas) {
canvas.save(Canvas.MATRIX_SAVE_FLAG);
canvas.drawPath(outerLogoEdge, centerOuterPaint);
canvas.restore();
}
public float getSemicircle(float xStart, float yStart, float xEnd,
float yEnd, RectF ovalRectOUT) {
float centerX = xStart + ((xEnd - xStart)/2);
float centerY = yStart + ((yEnd - yStart)/2);
double xLen = (xEnd - xStart);
double yLen = (yEnd - yStart);
float radius = (float) (Math.sqrt(xLen * xLen + yLen * yLen)/2);
RectF oval = new RectF(centerX - radius,
centerY - radius, centerX + radius,
centerY + radius);
ovalRectOUT.set(oval);
double radStartAngle = 0;
radStartAngle = Math.atan2(yStart - centerY, xStart - centerX);
float startAngle = (float) Math.toDegrees(radStartAngle);
return startAngle;
}
}
z kodu TestView.java, centerOuterPaint.setStrokeWidth (strokeWidth) wydaje się przyczyną problemu.
To jest część mojego modułu aplikacji i nie działa na Androidzie M. Testowane na Nexusie 5 z systemem Android 6.0.
kod źródłowy w https://github.com/vyshas/SpeedometerTest
więc już zdebugowałeś swój kod? – pskink
@pskink yes Zrobiłem .... –
i czy zauważyłeś, co się dzieje, jeśli używasz mniejszej skali w 'onDraw'? 100 na przykład? – pskink