私はアンドロイドアプリケーション用のカラーピッカーを実装しようとしていて、Android 4.1.1で奇妙な問題が発生しました。が Android 4.1.1のComposeShaderに関する問題
(下記の赤いボックスを無視する:ここで問題です
Shader fadeInRight = new LinearGradient(0, 0, pWidth, 0, 0x00000000, 0xFF000000, Shader.TileMode.CLAMP);
Shader blackToWhite = new LinearGradient(0, 0, 0, pHeight, 0xFF000000, 0xFFFFFFFF, Shader.TileMode.CLAMP);
Shader whiteMask = new ComposeShader(blackToWhite, fadeInRight, PorterDuff.Mode.DST_IN);
Shader blackToColor = new LinearGradient(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);
:2.3.7に次のコードは、Android 4.1.1に期待グラデーションを作成しませんが、それはありませんAndroid 4.1.1。上記のグラデーションについてお話します)
何が問題なのですか?私のコードには何かがないと思いますが、何も考えていません。
EDIT#1:輝く2.3.7に私は(ポップアップの背後にある)設定メニューのテキストを見ることができます:私はちょうどsetShader
ためwhiteMask
を使用する場合は 、私はまた、両方のシステムのために異なる結果を得ますグラデーション矩形を通してさらに、左上端から右下端(黒から白)までの勾配がありますが、4.1.1の勾配は左から右に水平になります。私は、問題を説明するために、より単純な例を見つけ :だから、それはComposeShader
EDIT#2に問題があるようですので、
Shader shader1 = new LinearGradient(0, 0, 0, pHeight, hue, 0xffffffff, Shader.TileMode.CLAMP);
Shader shader2 = new LinearGradient(0, 0, pWidth, 0, 0xff000000, 0xffffffff, Shader.TileMode.CLAMP);
Shader shader = new ComposeShader(shader1, shader2, PorterDuff.Mode.MULTIPLY);
を、我々はわずか垂直直線勾配を持っています任意の色を黒色に、水平線形勾配を黒色から白色に変換する。これらの2つのレイヤーを掛け合わせると、(上記の左のスクリーンショットのように)正しい長方形が得られるはずです。しかし、Android 4.1.1では、シェーダ2のグラデーションのみが表示されます。私もGimpで2つのレイヤーを試してみましたが、結果はAndroid 2.3.7と同じでした。
デフォルトでハードウェアアクセラレーションが適用されていますか?私はあなたから提供されたリンクでこの情報を見つけられませんでした。 – Marek
わかりませんが、私はそう思っています:-) –
また、ViewCompat.setLayerType(view、View.LAYER_TYPE_SOFTWARE、null);メソッド/ call in support-v4ライブラリもあります。 – Mavrik