나는 안드로이드 응용 프로그램 용 색상 선택 도구를 구현하려고하고 있으며 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에 다음 코드는 안드로이드 4.1.1에 예상 그라디언트를 생성하지 않는다, 그러나 안드로이드 4.1.1. 위의 그라디언트에 대해서 이야기했습니다.)
어떤 아이디어가 잘못 되었나요? 내 코드에는 뭔가 빠져있는 것 같지만 어떤 생각이 들지 않습니다.
수정 # 1 : 빛나는 2.3.7에 나는 (팝업 뒤에) 구성 메뉴의 텍스트를 볼 수 있습니다 : 난 그냥 setShader
에 대한 whiteMask
를 사용하는 경우 , 나 또한 두 시스템 모두에 대해 서로 다른 결과를 얻을 수 그라디언트 사각형을 통해. 또한 왼쪽 위 가장자리에서 오른쪽 아래 가장자리 (검은 색에서 흰색)까지의 그래디언트가 있지만 4.1.1의 그래디언트는 왼쪽에서 오른쪽으로 수평으로 이동합니다. 나는이 문제를 설명하는 더 간단한 예를 발견 : 은 그래서 ComposeShader
편집 # 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);
그래서를 우리는 불과 수직 선형 그라데이션이 모든 색상을 검정색으로, 검정색에서 흰색까지의 수평 선형 그래디언트. 이 두 레이어를 곱하면 위의 왼쪽 스크린 샷과 같이 올바른 사각형을 얻어야합니다. 하지만 Android 4.1.1에서는 shader2의 그래디언트 만 보았습니다. 나는 또한 Gimp에서 두 개의 레이어를 사용하여이 작업을 시도했으며 결과는 Android 2.3.7에서와 동일합니다.
하드웨어 가속이 기본적으로 적용됩니까? 귀하가 제공 한 링크에서이 정보를 찾지 못했습니다. – Marek
모르겠다. 그러나 나는 그렇게 생각한다 :-) –
또한 ViewCompat.setLayerType (view, View.LAYER_TYPE_SOFTWARE, null);'method/call in support-v4 라이브러리가있다. – Mavrik