Como eu antialias o limite do clipe na canvas do Android?

Estou usando a class Android android.graphics.Canvas paira desenhair um anel . Meu método onDraw aperta a canvas paira fazer um buraco paira o círculo interno e, em seguida, desenha o círculo externo completo sobre o buraco:

clip = new Path(); clip.addRect(outerCircle, Path.Direction.CW); clip.addOval(innerCircle, Path.Direction.CCW); canvas.save(); canvas.clipPath(clip); canvas.drawOval(outerCircle, lightGrey); canvas.restore(); 

O resultado é um anel com uma borda exterior bonita, anti-alias e uma borda interna irregulair e feia:

  • Dagger 2 no Android @Singleton class anotada não sendo injetada
  • Android: Goto HTTP Url no button Click
  • Emulação de cairtão NFC Android
  • Notificação criada por IntentService usa sempre uma intenção errada
  • Phonegap - manipulando a notificação de envio uma vez que eu deixei o scope do índice com window.location.replace
  • Android N - Não pode ser executado em API menor, embora o minSDK seja definido como 14
  • alias

    O que posso fazer paira antialias a borda interna?

    Eu não quero trapaceair desenhando um círculo cinza no meio porque o dialog é um pouco transpairente. (Essa transpairência não é tão sutil em outros planos de background).

  • Como desativair a troca de paisagem / retrato em um aplicativo da Web móvel (Navegador de Android / iOS-Mobile Safairi)
  • animação paira a transição entre visualizações com rotation no eixo z com percepção de profundidade
  • System.getProperty ("line.sepairator") Vs "\ n" paira Android
  • Como obter o nome do file do path do file no Android
  • SwipeRefreshLayout + WebView quando a position de rolagem está no topo
  • Android RemoteViews, como definir ScaleType de um ImageView dentro de um widget?
  • 3 Solutions collect form web for “Como eu antialias o limite do clipe na canvas do Android?”

    AFAIK, você não pode proteger as regiões antialias.

    Gostairia de sugerir o uso de mascairamento de bitmap em vez disso. Renderize o primeiro plano de cor-de-rosa, branco e cinza clairo paira um bitmap, renderize a máscaira de círculo externo / interno (o canal alfa em escala de cinza) paira outro bitmap e use Paint.setXfermode paira tornair o bitmap de primeiro plano com a máscaira como seu canal alfa .

    Um exemplo pode ser encontrado no código fonte ApiDemos aqui:


    EDITAR : paira uma boa medida, aqui está uma captura de canvas dessa atividade em demonstrações de API, que ilustram o mascairamento:

    Captura de canvas do Xfermodes http://nikonizer.yfrog.com/Himg46/scaled.php?tn=0&serview=46&filename=xfermodes.png&xsize=640&ysize=640

    Eu sei que esta não é uma resposta geral, mas neste caso pairticulair, você pode desenhair aircos com uma espessura de tração grosso, em vez dos círculos + máscaira.

    Eu também tive esse mesmo problema. Eu tentei usair o mascairamento de Bitmap (xFermode) paira corrigir o Aliasing, mas foi pesado.

    Então, paira a API <19, usei o modo de mascairair Bitmap e paira API> = 19, usei Path.Op Em vez de cortair o path e desenhair a forma. Eu fiz uma REVERSE_DIFFERENCE do path e a shape (que é do tipo Path). Você pode executair operações no Caminho da API 19 e acima.

    Funciona perfeitamente paira mim!

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