2011-09-07 21 views
16

Bir sorunum var. Renk olarak bir degrade ile bir metin görünümü olmasını isterim. Ve arkasında siyah bir gölge var. Sorun gölge denilen renk kullanmanın yerine gradyan rengini kullanarak olmasıdır (Color.BLACK)TextView degrade ve gölge ekleyerek

Benim kodudur: 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!? 
      ); 

herkes ne yapacağını bilir mu

cevap

17

Ben tam olarak aynı problem vardı. TextView ve onDraw yöntemini geçersiz kılarak düzeltmeyi başardım. İşte Eğer gradyan şeffaflık ile renkleri kullanmak istiyorsanız

@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); 
} 

Ancak bu yöntem muhtemelen işe yaramaz gibi görünüyor nasıl.