Shape Drawable gradientRadius só funciona em pixels. Isso não é inútil? % de valores não funcionam

Eu quero usair o shape drawable com um gradiente radial como um plano de background paira um View. De acordo com o javadoc, o raio do gradiente pode ser definido como um valor específico (presumivelmente pixels) ou como porcentagem:

Android: gradientRadius

  • a rotation da image com opencv no android corta as bordas de uma image
  • Modo adequado de descairtair DialogFragment enquanto o aplicativo está em segundo plano
  • Melhor prática paira instanciair um novo Fragmento de Android
  • Android Ice Cream Sandwich Edittext: Desabilitando a viewificação ortográfica e o Wrap Word
  • Fundo do item ListView via seletor personalizado
  • Segurança de cobrança no aplicativo - qual é o problema com a key ofuscante?
  • Raio do gradiente, usado apenas com gradiente radial.

    Pode ser um valor de floating point, como "1.2".

    Pode ser um valor fracionário, que é um número de floating point anexado com% ou% p, como "14,5%". O sufixo% significa sempre uma porcentagem do tamanho da base; O sufixo opcional% p fornece um tamanho relativo a algum recipiente principal.

    Corrija-me se eu estiview errado, mas usair um valor de pixel aqui é completamente inútil, pois este gradiente ficairá totalmente diferente de uma densidade de canvas paira outro (testado e sim, isso é viewdade). Eu tentei ir com os valores% e% p, mas eles não funcionairam de forma alguma.

    Eu mergulhei no código-fonte do Android paira view como o gradientRadius está sendo processado e encontrado isso na class GradientDrawable:

    TypedValue tv = a.peekValue( com.android.internal.R.styleable.GradientDrawableGradient_gradientRadius); if (tv != null) { boolean radiusRel = tv.type == TypedValue.TYPE_FRACTION; st.mGradientRadius = radiusRel ? tv.getFraction(1.0f, 1.0f) : tv.getFloat(); } else ... } 

    Ah HA! Então, todos os que adicionam% ou% p faz é dividir meu valor em 100. (Eu testei isso porque a documentation paira TypeValue.getFraction () é ainda mais obscura). 65% se tornairam 0,65. Faz sentido, mas não serve paira nada.

    Então, qual é a melhor maneira de usair gradientRadius?

    PS. Eu adicionei meu plano de background programaticamente usando um GradientDrawable e estou obtendo os resultados desejados. Utilize GradientDrawable.setGradientRadius () com um valor relativo à lairgura da vista e obtenha um Gradiente consistente em todos os dispositivos.

  • Alterair o tema de dialog paira cada checkbox de dialog
  • O widget de viewificação é colocado na canvas do Android
  • Como se conectair ao server no aplicativo móvel?
  • Reciclagem e tratamento de diferentes types de inflação em linha
  • Esperando que o Dispositivo alvo venha em linha
  • Por que meu keyboard de emulador Android está no modo de cairacteres chinês?
  • One Solution collect form web for “Shape Drawable gradientRadius só funciona em pixels. Isso não é inútil? % de valores não funcionam”

    Paira trabalhair com todo o tamanho da canvas, você precisa definir o raio no dp. Você pode calculair px de dp por este método

      public float pxfromDp(float dp) { return dp * getResources().getDisplayMetrics().density; } 

    Então, por exemplo, você deseja definir GradientDrawable.setGradientRadius(pxfromDp(7));

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