2012-01-28 44 views

Trả lời

0

không hoàn toàn chắc chắn, nhưng có lẽ bạn có thể sử dụng này:

link

TextView test = (TextView) findViewById(R.id.test); 

test.setShadowLayer(float, float, float, int); 
+3

Lớp bóng khác nhau, nó sẽ đặt một màu được chỉ định phía sau văn bản, sau đó văn bản sẽ xuất hiện dưới dạng một số màu bị mờ. –

+0

Hmm, tôi nghĩ rằng tôi biết ý bạn là gì, Nó sẽ không tạo ra lợi thế sạch sẽ? Tôi đã suy nghĩ bằng cách sử dụng thiết lập màu văn bản màu đen và giống như màu đỏ bóng hoặc một cái gì đó – FabianCook

+0

Xem như thế nào về "Hi" các cạnh của màu nền không mờ, đó là những gì tôi có nghĩa là bởi một cạnh sạch – FabianCook

15

Không sử dụng FILL_AND_STROKE. Vẽ một lần bằng FILL và sau đó thay đổi màu sắc và vẽ bằng STROKE.

(. Điều đó làm việc cho hình chữ nhật Tôi không chắc chắn STROKE làm việc tại tất cả các văn bản Bạn sẽ phải thử nó và tìm hiểu..)

+0

tôi đã thử nó nhưng văn bản kết quả là không nhìn tốt khi chiều rộng đột quỵ là nhiều hơn nữa. –

+0

là nhiều hơn những gì? –

+1

cho kích thước văn bản cao hơn và chiều rộng nét vẽ văn bản kết quả trông xấu xí. –

16

Bên trong TextView tùy chỉnh (không hoạt động trong EditText):

@Override 
public void onDraw(Canvas canvas) 
{ 
    final ColorStateList textColor = getTextColors(); 

    TextPaint paint = this.getPaint(); 

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

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

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

Điều này không hoạt động nếu bạn thực hiện nó trong EditText tùy chỉnh, trong trường hợp đó trên setTextColor cuối cùng được hiển thị, bất kỳ ý tưởng tại sao? – TilalHusain

+0

@Architact Có lẽ nhất là do việc triển khai 'onDraw' từ' EditText' vẽ nền theo mặc định và do đó cuộc gọi thứ hai sẽ vẽ lên trên đầu tiên. Điều này chỉ hoạt động cho nền trong suốt. Những gì bạn phải làm trong trường hợp nền không trong suốt là sao chép toàn bộ onDraw từ siêu và chỉ vẽ văn bản hai lần. – Trilarion

+0

nó sẽ lặp lại onDraw mãi mãi – user924

0

tôi đã sử dụng giải pháp đầu tiên ở trên để đưa ra ý tưởng này: đặt xuống một cơn đột quỵ lớn, văn bản và sau đó che phủ nó với một văn bản FILL_AND_STROKE nhỏ:

mScorePaint = new TextPaint(); 
mScorePaint.setTextSize(63); 
mScorePaint.setStyle(Style.STROKE); 
mScorePaint.setStrokeJoin(Join.ROUND); 
mScorePaint.setStrokeMiter(10.0f); 
mScorePaint.setStrokeWidth(frameWidth/50.0f); // about 12 
mScorePaint.setColor(0xffff0000); // black 

c.drawText(Integer.toString(mScore), x, y, mScorePaint); // red first 

mScorePaint.setStrokeWidth(frameWidth/125.0f); // about 5 
mScorePaint.setColor(0xff000000); // red 

c.drawText(Integer.toString(mScore), x, y, mScorePaint); // black on top 

Vì fILL mình wa không thấy bất kỳ thuộc tính nào của Stroke và sắp ra rất mỏng.

+0

điều này là ngu ngốc, tôi chỉ muốn sử dụng tham số bố cục của TextView, làm cách nào để biết x, y nào tôi nên đặt thành c Phương thức .drawText, vô ích – user924

Các vấn đề liên quan