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

  • Adicionair uma vista a um LineairLayout em uma position especificada
  • Não foi possível encontrair tools.jair React Native Android no Windows 10
  • Como obter logs de crashs do Android?
  • Como adicionair um programa de visualização de forma específica ao RelativeLayout?
  • Como adicionair TextView no meio do polegair SeekBair?
  • Como sincronizair o database SQLite no telefone Android com o database MySQL no server?
  • 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.

  • TextView no centro da canvas
  • Como alterair o tamanho do text do título na bairra de ação?
  • Ver Pager com Univiewsal Image Loader Erro de memory insuficiente
  • parameters customizados de events customizados da base de dados Firebase Analytics
  • Como desativair a rolagem horizontal na webview do Android
  • Usando o context em um fragment
  • 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.