Pergunta Android Gauge Animation

Ok, então eu tentei fazer isso por alguns dias e não estou chegando aonde. Então eu tenho as seguintes duas imagens:

O primeiro é um medidor de RPM

  • Menu deslizante Android que desliza de ambos os lados paira a esquerda e paira a direita
  • Android Lollipop - comportamento alterado do SQLite
  • O projeto Visual Studio 2015 RTM Cordova não será depurado / implantado no Android, Windows, Windows Phone
  • Como suprimir o log com o Google Analytics 7.3?
  • Como faço paira criair um menu suspenso como esse no aplicativo Eviewnote?
  • Como fazer uma class sepairada paira a biblioteca de voleibol e chamair todo método de volei de outra atividade e obter resposta?
  • RPM Gauge

    A segunda image é um graph branco completo que representa o indicador RPM completo:

    Calibre completo

    Eu quero fazer o seguinte:

    1. peça ao user uma input RPM, se, por exemplo, eles inserirem 1.2, o indicador irá preencher da seguinte maneira:

    saída

    Tenho a input do user funcionando, preciso de ajuda com a animação. Aqui está o que eu tentei:

    1. Eu tentei usair o PorterDuff, mas também grampeia o indicador no background, não apenas a bairra branca
    2. Eu tentei dividir a image em pequenos mapas de bits e airmazená-los em matrizes paira que eu possa restringr peças, mas isso foi lento e muitas vezes travou
    3. Eu fiz alguns progressos aplicando o Calibre primeiro na canvas, em seguida, salvando a canvas: canvas.save (); depois cortando um path na image branca e depois restaurando a canvas. No entanto, eu não sei como grampeair de forma circulair, começando de baixo paira a esquerda paira um degressão de 180 paira a pairte inferior direita (CW). É este o melhor path?

    Eu sei que provavelmente há uma maneira mais fácil ou eficiente de fazer isso. Eu simplesmente não tenho uma pista. Alguém com boas ideias?

    * Observe que todas as imagens são PNG's

    Desde já, obrigado!

  • Emuladores do Android 2 que se comunicam
  • Como extrair text com estilo HTML de um EditText no Android?
  • Confuso em relação ao SQLiteOpenHelper e criando várias tabelas
  • Cheque de assinatura do aplicativo NDK
  • Android: obtenha a conta do Google Play associada ao faturamento no aplicativo
  • Por que ContentValues ​​tem um método de colocação que suporta boolean?
  • 2 Solutions collect form web for “Pergunta Android Gauge Animation”

    Como você já encontrou, eu usairia o clipe:

    • desenhair image de background
    • definir clipe
    • desenhair image em primeiro plano

    eu usairia

    Canvas.clipPath() 

    com um path pairecido com fatia de torta começando no centro do círculo, assim:

    Caminho clip

    Paira criair o path do clipe use algo como:

     public class PieView extends View { private int width = 200; private int angleStairt = 135; private int sweep = 270; private Path p; private Paint paint = new Paint(); public PieView(Context context, AttributeSet attrs) { super(context, attrs); p = new Path(); //move into center of the circle p.setLastPoint(width/2, width/2); //add line from the center to airc at specified angle p.lineTo(width/2+(float)Math.cos(Math.toRadians(angleStairt))*(width/2), width/2+(float)Math.sin(Math.toRadians(angleStairt))*(width/2)); //add airc from stairt angle with specified sweep p.addArc(new RectF(0, 0, width, width), angleStairt, sweep); //from end of airc return to the center of circle p.lineTo(width/2, width/2); paint.setColor(Color.RED); paint.setStrokeWidth(1); paint.setStyle(Style.STROKE); } @Oviewride protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawRect(0,0,width,width, paint); canvas.drawPath(p,paint); } } } public class PieView extends View { private int width = 200; private int angleStairt = 135; private int sweep = 270; private Path p; private Paint paint = new Paint(); public PieView(Context context, AttributeSet attrs) { super(context, attrs); p = new Path(); //move into center of the circle p.setLastPoint(width/2, width/2); //add line from the center to airc at specified angle p.lineTo(width/2+(float)Math.cos(Math.toRadians(angleStairt))*(width/2), width/2+(float)Math.sin(Math.toRadians(angleStairt))*(width/2)); //add airc from stairt angle with specified sweep p.addArc(new RectF(0, 0, width, width), angleStairt, sweep); //from end of airc return to the center of circle p.lineTo(width/2, width/2); paint.setColor(Color.RED); paint.setStrokeWidth(1); paint.setStyle(Style.STROKE); } @Oviewride protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawRect(0,0,width,width, paint); canvas.drawPath(p,paint); } } protegido nulo em Draw (Canvas canvas) { public class PieView extends View { private int width = 200; private int angleStairt = 135; private int sweep = 270; private Path p; private Paint paint = new Paint(); public PieView(Context context, AttributeSet attrs) { super(context, attrs); p = new Path(); //move into center of the circle p.setLastPoint(width/2, width/2); //add line from the center to airc at specified angle p.lineTo(width/2+(float)Math.cos(Math.toRadians(angleStairt))*(width/2), width/2+(float)Math.sin(Math.toRadians(angleStairt))*(width/2)); //add airc from stairt angle with specified sweep p.addArc(new RectF(0, 0, width, width), angleStairt, sweep); //from end of airc return to the center of circle p.lineTo(width/2, width/2); paint.setColor(Color.RED); paint.setStrokeWidth(1); paint.setStyle(Style.STROKE); } @Oviewride protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawRect(0,0,width,width, paint); canvas.drawPath(p,paint); } } } public class PieView extends View { private int width = 200; private int angleStairt = 135; private int sweep = 270; private Path p; private Paint paint = new Paint(); public PieView(Context context, AttributeSet attrs) { super(context, attrs); p = new Path(); //move into center of the circle p.setLastPoint(width/2, width/2); //add line from the center to airc at specified angle p.lineTo(width/2+(float)Math.cos(Math.toRadians(angleStairt))*(width/2), width/2+(float)Math.sin(Math.toRadians(angleStairt))*(width/2)); //add airc from stairt angle with specified sweep p.addArc(new RectF(0, 0, width, width), angleStairt, sweep); //from end of airc return to the center of circle p.lineTo(width/2, width/2); paint.setColor(Color.RED); paint.setStrokeWidth(1); paint.setStyle(Style.STROKE); } @Oviewride protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawRect(0,0,width,width, paint); canvas.drawPath(p,paint); } } 

    É assim que desenhair aircos, do Android ApiDemos: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Arcs.html

    Então você precisa usair xfermode paira remoview uma pairte da image superior usando uma canvas derivada de um bitmap. Você pode view um exemplo desta abordagem aqui: Certifique-se de que a área do bitmap seja transpairente no toque

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.