2017-10-29 1 views
0

첫 번째 게시물은 여기에 있습니다. 또한이 중 하나가 눈에 띄게 명백한 경우 나에게 실례합니다. 나는 xml에 총 뉴비 오전 & 자바와 주로 디자이너.멀티 컬러 그라디언트 정의

내가 작업중인 앱을 위해 Adobe Illustrator 및 Photoshop에서 만든 디자인을 구현하고 싶습니다. 기본 그라디언트에 대해 시작/중앙/끝 색으로 XML을 사용할 수 있다는 것을 알고 있습니다. 하지만 원하는 색상과 사용자 정의 간격으로 시작하고 끝내는만큼 많은 색상을 사용하여 디자인 한 색상을 정확하게 만들고 싶습니다. 다른 솔루션에서이 솔루션을 찾았습니다.

ShapeDrawable.ShaderFactory shaderFactory = new ShapeDrawable.ShaderFactory() { 
    @Override 
    public Shader resize(int width, int height) { 
     LinearGradient linearGradient = new LinearGradient(0, 0, width, height, 
      new int[] { 
       0xFF1e5799, 
       0xFF207cca, 
       0xFF2989d8, 
       0xFF207cca }, //substitute the correct colors for these 
      new float[] { 
       0, 0.40f, 0.60f, 1 }, 
      Shader.TileMode.REPEAT); 
     return linearGradient; 
    } 
}; 
PaintDrawable paint = new PaintDrawable(); 
paint.setShape(new RectShape()); 
paint.setShaderFactory(shaderFactory); 

수동으로 값/색상을 통해 정의한 색상을 어떻게 포함시킬 수 있습니까? 정수가 아니기 때문에 @color/darkgrey 등을 분명히 사용하게하지 않습니다. 또한 나는 아마 같은 이유로 그것을 헥사 코드에 넣을 수 없다.

나는 새로운 INT [] 할 싶습니다 {@ 색상/A, @ 색상/B를, ...}

또한

, 두 번째 질문은 : 플로트는 사용자 정의 간격을 정의 보인다에서 색 사용됩니다. 그의 예에서 그는 4 가지 int 색과 4 가지 부동 소수점 값을 가졌지 만, 그것은 내가 이해 한 것 (?)에서 3 개의 간격만을 정의 할 것입니다 : [0,0.4] [0.4,0.6] [0.6,1] 퍼센트로. 아니면 다른 방식으로 작동합니까?

필자는 필요한 경우 자세한 내용을 지정합니다.

+0

https://stackoverflow.com/questions/13929877/how-to-make-gradient-background-in-android/13968524#13968524 당신이 "에 의해 의미합니까 무엇 그것은 나를 @color를 사용하지 않습니다/darkgrey 등 "? – miroslavign

답변

1

수동으로 값/색상을 통해 정의한 색상을 어떻게 포함시킬 수 있습니까? 당신이 자바의 색상 자원 값을 사용하려면

, 당신은 Context 개체에 대한 액세스 또는 그 서브 클래스 중 하나 (같은이 Activity)가 필요합니다. 그럼 당신은

int color = ContextCompat.getColor(context, R.color.my_color_name); 

플로트는 색상이

정확 하

을 사용하는있는 사용자 정의 간격을 정의하는 것 같다 호출 할 수 있습니다. float[] 값은 각 색상이 배치되는 0에서 1 사이의 지점을 정의합니다. 따라서 4 가지 색상이 있다면 4 가지 위치를 원할 것입니다. 처음과 마지막은 0과 1이어야합니다. 에 color_three0.33
  • color_two0에서 color_two

    • color_one : 이것은에서 그라데이션을 생산하는 것

      int[] colors = new int[] { 
          ContextCompat.getColor(context, R.color.color_one), 
          ContextCompat.getColor(context, R.color.color_two), 
          ContextCompat.getColor(context, R.color.color_three), 
          ContextCompat.getColor(context, R.color.color_four); 
      }; 
      
      float[] positions = new float[] { 
          0, 0.33, 0.67, 1 
      }; 
      
      LinearGradient linearGradient = 
          new LinearGradient(0, 0, width, height, colors, positions, Shader.TileMode.REPEAT); 
      

      : 염두에두고

      , 다음과 같이 쓸 수있다 0.33 ~ 0.67
    • color_three to color_four0.67 to 1.
  • +0

    대단히 감사합니다! 처음에는 컨텍스트 인수와 관련하여 다소 혼란 스러웠습니다. 그러나이를 LoginActivity.this (응용 프로그램이 적용된 응용 프로그램)로 교체하고 일부 Google 검색 후 작동했습니다. 이제 각도에 어떻게 영향을 줍니까? 그것은 마지막으로 빠진 것이고, 현재는 대각선입니다. – TeraGerard

    +0

    첫 번째 네 개의 인자 (나의 예제에서는'0, 0, width, height')는 두 점이므로, 예제 그라디언트는'(0,0)'에서'(width, height)'까지 끌어다 쓴다. 두 점의 상대적 위치는 각도를 정의합니다. –

    0

    @ Ben의 답변이 완전하고 대부분의 질문에 대한 답변입니다.또한 마지막 지점에 대답하기 위해

    나는 또한 hexa-code를 넣을 수 없다.

    자바에서는 헥사 표기법을 나타내는 앞에 '0x'를 붙입니다. 색상은 ARGB (알파/R/G/B)로 표현되므로 표현식은

    int red = 0xffff0000, blue = 0xff0000ff, green = 0xff00ff00; 
    int red_half_alpha = 0x80ff0000; 
    

    입니다. 에서

    +0

    0x에 대한 설명을 해 주셔서 감사합니다. 어떻게 적용 할 수 있는지 알고 있습니다. 벤이 제공 한 위의 방법을 사용하면 일관성 측면에서 더 좋을 것입니다. 또한 ARGB를 항상 조회해야하는 것을 피하기 위해, 제가 생각합니까? – TeraGerard

    +0

    예, 하드 코딩 된 것이 적어 질수록 Java의 16 진수 값을 사용하는 방법을 알려주고 싶습니다. :) – rupps