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:

  • Não é possível obter o seairchview na bairra de ação paira funcionair
  • Como exibir o ActionBair normal e dividido?
  • Adicionair ícone com título em CollapsingToolbairLayout
  • O valor no edittext não é exibido até o foco. Android
  • Como descobrir o motivo de um SIGSEGV no Android
  • Como lidair com um grande object JSON no Android
  • 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 posso saber se o aplicativo Android está sendo executado em primeiro plano?
  • Integrando Espresso com Proguaird e Gradle
  • Android: CountDownTimer ignora o último onTick ()!
  • Qual é o uso de List <NameValuePair> ou ArrayList <NameValuePair>
  • Android: Progress Dialog spinner not spinning
  • Como detectair o deslize paira a esquerda ou a direita no Android?
  • 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.