2016-11-11 75 views
4

我想有適用於它的阿爾法線性漸變一個TextView,像這樣:在TextView上使用alpha蒙版也會移除父視圖alpha?

enter image description here

我有幾乎工作的實施,這裏的代碼:

public class MyTextView extends TextView { 

    Paint paint = new Paint(); 

    void init() { 
     paint.setAlpha(0xffffffff); 
     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.OVERLAY)); 
     paint.setShader(
      new LinearGradient(
       0, 0, getWidth(), getHeight(), 
       0xffffffff, 0x00000000, 
       Shader.TileMode.CLAMP)); 
    } 

    void draw(Canvas canvas) { 
     super.draw(canvas); 

     canvas.drawRect(0, 0, getWidth(), getHeight(), paint); 
    } 
} 

它坐在這個佈局中,它有自己的半透明背景:

<View background="#33000000"> 
    <MyTextView /> 
</View> 

塗料模式似乎是t o刪除其父視圖的半透明背景顏色。我不知道如何阻止我的textview類中的繪製代碼影響其父視圖的背景顏色?

感謝

回答

0

試試這個:

public class AlphaMaskLayout extends RelativeLayout { 

    private Paint paint; 

    public AlphaMaskLayout(Context context) { 
     super(context); 
     init(context, null, 0); 
    } 

    public AlphaMaskLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(context, attrs, 0); 
    } 

    public AlphaMaskLayout(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     init(context, attrs, defStyle); 
    } 

    private void init(Context context, AttributeSet attrs, int defStyle) { 
     paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     paint.setAlpha(0xffffffff); 
     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); 

     setLayerType(LAYER_TYPE_SOFTWARE, null); 
     setWillNotDraw(false); 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     super.draw(canvas); 
     canvas.drawRect(0, 0, getWidth(), getHeight(), paint); 
    } 

    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     super.onSizeChanged(w, h, oldw, oldh); 
     paint.setShader(
       new LinearGradient(
         0, 0, w, h, 
         new int[]{ 0xffffffff, 0xfaffffff, 0x00000000, 0x00000000, 0xfaffffff, 0xffffffff}, 
         new float[]{0, 0.15f, 0.3f, 0.7f, 0.85f, 1f}, 
         Shader.TileMode.CLAMP)); 
    } 
} 

在XML:

<your.package.AlphaMaskLayout 
    android:layout_centerInParent="true" 
    android:layout_width="160dp" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:id="@+id/moving_textview" 
     android:layout_centerVertical="true" 
     android:padding="16dp" 
     android:textSize="16sp" 
     android:background="@null" 
     android:textColor="@android:color/white" 
     android:shadowColor="@android:color/black" 
     android:shadowDx="1" 
     android:shadowDy="1" 
     android:shadowRadius="1" 
     android:text="Hello World!!!" 
     android:gravity="center" 
     android:layout_centerInParent="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

</saulmm.coordinatorexamples.AlphaMaskLayout> 
+0

這並不提供答案的問題。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/17860463) –