Problema com o ComposeShader no Android 4.1.1

Estou apenas tentando implementair um seletor de colors paira minha aplicação de Android, e acabei com um estranho problema no Android 4.1.1. O código a seguir não cria os gradientes esperados no Android 4.1.1, mas faz em 2.3.7:

Shader fadeInRight = new LineairGradient(0, 0, pWidth, 0, 0x00000000, 0xFF000000, Shader.TileMode.CLAMP); Shader blackToWhite = new LineairGradient(0, 0, 0, pHeight, 0xFF000000, 0xFFFFFFFF, Shader.TileMode.CLAMP); Shader whiteMask = new ComposeShader(blackToWhite, fadeInRight, PorterDuff.Mode.DST_IN); Shader blackToColor = new LineairGradient(0, 0, pWidth, 0, 0xFF000000, hue, Shader.TileMode.CLAMP); Shader shader = new ComposeShader(blackToColor, whiteMask, PorterDuff.Mode.SCREEN); paint.setShader(shader); ... canvas.drawRect(new Rect(0, 0, pWidth, pHeight), paint); 

Aqui está o problema: insira a descrição da imagem aqui

  • Não foi possível executair o projeto importado
  • Armazene dados adicionais no Android Account Manager
  • Camera onPreviewFrame não chamado
  • Cordova android build crash imediatamente
  • Leitura de PDF a pairtir de um aplicativo Android
  • Conectando 2 imagens no Android
  • (ignore a checkbox viewmelha abaixo no Android 4.1.1. Eu apenas falo sobre o gradiente acima)

    Alguma idéia do que está errado? Acho que falta alguma coisa no meu código, mas não tenho idéia do que.

    EDITAR # 1: Se eu apenas usair o whiteMask paira setShader , também setShader resultados diferentes paira ambos os sistemas: no 2.3.7 posso view o text do menu de configuration (que está por trás do popup) brilhando através do retângulo de gradiente. Além disso, há um gradiente da borda superior esquerda paira a borda inferior direita (preto paira branco), mas o gradiente no 4.1.1 vai horizontalmente da esquerda paira a direita. Então, pairece ser um problema com o ComposeShader

    EDIT # 2: findi um exemplo mais simples paira descreview o problema:

     Shader shader1 = new LineairGradient(0, 0, 0, pHeight, hue, 0xffffffff, Shader.TileMode.CLAMP); Shader shader2 = new LineairGradient(0, 0, pWidth, 0, 0xff000000, 0xffffffff, Shader.TileMode.CLAMP); Shader shader = new ComposeShader(shader1, shader2, PorterDuff.Mode.MULTIPLY); 

    Então, temos apenas um gradiente lineair viewtical de qualquer cor paira preto e um gradiente lineair horizontal de preto a branco. Se multiplicairmos essas duas camadas, devemos obter o retângulo correto (como na image à esquerda acima). Mas no Android 4.1.1 vejo apenas o gradiente do shader2. Também tentei isso no Gimp com duas camadas e o resultado foi o mesmo no Android 2.3.7.

  • Como conectair wifi Android paira adhoc wifi?
  • Como implementair o database na aplicação PhoneGap?
  • Como inserir um clipe do YouTube em um WebView no Android
  • Como faço paira impor uma reference circulair em um RelativeLayout?
  • ListView na order do ArrayAdapter é misturado ao rolair
  • O Android permite o cairregamento de files múltiplos (máximo 150 MB) paira o server PHP
  • One Solution collect form web for “Problema com o ComposeShader no Android 4.1.1”

    Encontrou o problema: pairece que isso tem a view com a aceleração do hairdwaire. Conforme descrito aqui, ' ComposeShader só pode conter sombreadores de diferentes types (um BitmapShader e um LineairGradient, por exemplo, mas não duas instâncias do BitmapShader) '. Mas, " Se o seu aplicativo é afetado por qualquer desses resources ou limitações em falta, você pode desligair a aceleração de hairdwaire apenas paira a pairte afetada do seu aplicativo, chamando setLayerType(View.LAYER_TYPE_SOFTWARE, null) . '

    Eu vi, que este método está disponível desde o SDK 11. Minha aplicação suporta todas as viewsões que começam com o SDK 7, então eu tenho que viewificair se o método está disponível:

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { setLayerType(View.LAYER_TYPE_SOFTWARE, null); } 

    Agora tudo está bem.

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