2012-12-26 1 views
4

다른 그라디언트가있는 단추를 프로그래밍 방식으로 만들려고합니다. ShapeDrawable을 사용하고 매력처럼 작동합니다. 나는 버튼에 그림자을 추가하고 싶습니다 그러나그림자를 프로그래밍 방식으로 ShapeDrawable에 추가하십시오.

RoundRectShape rs = new RoundRectShape(new float[] { 12f, 12f, 12f, 12f, 12f, 12f, 12f, 12f }, null, null); 
ShapeDrawable sd = new ShapeDrawable(rs); 
ShapeDrawable.ShaderFactory sf = new ShapeDrawable.ShaderFactory() { 

    @Override 
    public Shader resize(int width, int height) { 
     LinearGradient lg = new LinearGradient(0, 0, 0, height, 
       new int[] { 
        Color.parseColor("#feccb1"), 
        Color.parseColor("#f17432"), 
        Color.parseColor("#e86320"), 
        Color.parseColor("#f96e22") }, 
       new float[] { 
        0, 0.50f, 0.50f, 1 }, 
       Shader.TileMode.REPEAT); 
      return lg; 
     } 
    }; 
sd.setShaderFactory(sf); 
myBtn.setBackgroundDrawable(sd); 

, 하지 버튼 텍스트 프로그램. 어떤 도움을 주시면 감사하겠습니다.

답변

7

그러나 단추에 그림자를 추가하고 단추 텍스트를 프로그래밍 방식으로 추가하고 싶습니다.

당신이 만든 현재 드로어 블의 그림자를 원한다고 생각합니다. 예 다음 그림자 역할을 다른 Drawable (첫번째 배치)와 함께 LayerDrawable 한 경우 : 같이

RoundRectShape rss = new RoundRectShape(new float[] { 12f, 12f, 12f, 
      12f, 12f, 12f, 12f, 12f }, null, null); 
    ShapeDrawable sds = new ShapeDrawable(rss); 
    sds.setShaderFactory(new ShapeDrawable.ShaderFactory() { 

     @Override 
     public Shader resize(int width, int height) { 
      LinearGradient lg = new LinearGradient(0, 0, 0, height, 
        new int[] { Color.parseColor("#e5e5e5"), 
          Color.parseColor("#e5e5e5"), 
          Color.parseColor("#e5e5e5"), 
          Color.parseColor("#e5e5e5") }, new float[] { 0, 
          0.50f, 0.50f, 1 }, Shader.TileMode.REPEAT); 
      return lg; 
     } 
    }); 

    LayerDrawable ld = new LayerDrawable(new Drawable[] { sds, sd }); 
    ld.setLayerInset(0, 5, 5, 0, 0); // inset the shadow so it doesn't start right at the left/top 
    ld.setLayerInset(1, 0, 0, 5, 5); // inset the top drawable so we can leave a bit of space for the shadow to use 

    b.setBackgroundDrawable(ld); 
+0

감사합니다! 그것은 작동합니다. 밑에있는 "그림자"레이어가 흐릿하게 만드는 방법이 있습니까? (선형 그래디언트를 시도했지만 이상하게 보입니다 ...) –

+1

@ stevo.mit 원하는 것을 알고 있지만 단순한 것을 생각할 수 없습니다. 자신 만의'Drawable'을 만들 수 있고'draw' 메소드로 그 효과를 만들거나 간단한 것을 만들고 원하는 그림자를 가진 작은'.png' 이미지를 만들고 그 png 이미지를 반복하도록 설정된 타일 모드로'BitmapDrawable'을 만듭니다 그 BitmapDrawable을 그림자 레이어로 사용하십시오. – Luksprog

-1

더 깨끗한 방법이해야 할 그것을 Paint.setShadowLayer 사용을 Jack's answer

+0

링크에 Jack의 답변이있는 것 같지 않습니다. – Myoch