2011-09-07 19 views
16

Tôi gặp sự cố. Tôi muốn có một textview với một gradient như màu sắc. Và một bóng đen đằng sau nó. Vấn đề là cái bóng đang sử dụng màu của gradient, thay cho việc sử dụng được gọi là màu (Color.BLACK)TextView thêm gradient VÀ bóng

Mã của tôi là: numberTextView = (TextView)findViewById(R.id.something);

Shader textShaderTop = new LinearGradient(0, 30, 0, 60, 
       new int[]{Color.parseColor("#A6A6A6"), Color.parseColor("#E8E8E8"), Color.parseColor("#A6A6A6")}, 
       new float[]{0, 0.5f, 1}, TileMode.CLAMP); 
    numberTextView.getPaint().setShader(textShaderTop); 

    numberTextView.setShadowLayer(
       0.1f, //float radius 
       20f, //float dx 
       20f, //float dy 
       Color.BLACK //this is not black on the screen, but it uses the gradient color!? 
      ); 

Có ai biết phải làm gì

Trả lời

17

Tôi đã có cùng vấn đề y hệt. Tôi đã cố gắng sửa lỗi bằng cách mở rộng TextView và ghi đè lên phương thứcDraw. Sau đây là cách nó trông giống như

@Override 
protected void onDraw(Canvas canvas) { 
    // draw the shadow 
    getPaint().setShadowLayer(1, 1, 1, 0xbf000000); // or whatever shadow you use 
    getPaint().setShader(null); 
    super.onDraw(canvas); 

    // draw the gradient filled text 
    getPaint().clearShadowLayer(); 
    getPaint().setShader(new LinearGradient(0, getHeight(), 0, 0, 0xffacacac, 0xffffffff, TileMode.CLAMP)); // or whatever gradient/shader you use 
    super.onDraw(canvas); 
} 

Tuy nhiên phương pháp này có thể sẽ không hoạt động nếu bạn muốn sử dụng màu sắc với tính minh bạch trong gradient của bạn.