2013-01-14 50 views
2

裏面我已經開發了按鈕與中風文字泄漏的Android功能 'setTextColor'

import android.content.Context; 
import android.content.res.ColorStateList; 
import android.content.res.TypedArray; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint.Join; 
import android.graphics.Paint.Style; 
import android.text.TextPaint; 
import android.util.AttributeSet; 
import android.widget.Button; 


public class ButtonStrokeText extends Button 
{ 
    private int strokeColor=Color.TRANSPARENT; 
    private int strokeWidth=2; 

    public ButtonStrokeText(Context context) 
    { 
     super(context); 
    } 
    public ButtonStrokeText(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
     TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.ButtonStrokeText); 
     strokeColor=a.getColor(R.styleable.ButtonStrokeText_textStrokeColor, strokeColor); 
     strokeWidth=a.getDimensionPixelSize(R.styleable.ButtonStrokeText_textStrokeWidth, strokeWidth); 
     a.recycle(); 
    } 
    @Override 
    public void onDraw(Canvas canvas) 
    { 
     final ColorStateList textColor = getTextColors(); 

     TextPaint paint = getPaint(); 

     paint.setStyle(Style.STROKE); 
     paint.setStrokeJoin(Join.ROUND); 
     paint.setStrokeMiter(10); 
     setTextColor(strokeColor); 
     paint.setStrokeWidth(strokeWidth); 

     super.onDraw(canvas); 
     paint.setStyle(Style.FILL); 

     setTextColor(textColor); 
     super.onDraw(canvas); 
    } 
} 

但裏面有setTextColor(則strokeColor)泄漏。如果我評論這行活動沒有泄露,否則我有泄漏。

我的問題是,我怎樣才能避免這種泄漏?

+2

請張貼logcat的輸出 –

+0

請顯示setTextColor()的代碼 – Simon

+0

setTextColor的是Android功能N從TextView的http://grepcode.com/file/ repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/widget/TextView.java#TextView.setTextColor(int) –

回答

0

我解決了這個泄漏使用。

@Override 
public void invalidate() 
{ 
} 

也許是錯誤的,但它是工作)

1

我認爲你的問題是當你實例化你的ButtonStrokeText。在呼叫中使用getApplicationContext()而不是this(活動上下文)。我可以看到strokeColor是指aa是指context。活動上下文可能導致泄漏,所以使用應用程序上下文intead。

+0

我試過了,但它不起作用 –

+0

嘗試用'TypedArray a'替換固定顏色的所有用法,看看你是否仍然有漏洞,因爲這是最可疑的。 –

+0

也不起作用 –