2016-07-15 7 views
2

Ich möchte Grenze für meinen Text in TextView machen. Ich versuche Lösung für mich zu finden, aber ich finde nur Schatten - es ist wie folgt aussehen:Wie Rand für Text in TextView erstellen?

enter image description here

Aber ich möchte wie folgt aus:

enter image description here

Wie kann ich Grenze für Text zu machen?

+2

Aufruf versuchen, diese Fragen: http://stackoverflow.com/questions/1723846/how-do-you-draw-text-with -a-border-on-a-karteansicht-in-android http://stackoverflow.com/questions/2486936/android-shadow-on-text –

+0

@Artem siehe aktualisierte Antwort –

Antwort

10
public class CoustomTextView extends TextView { 

    private float strokeWidth; 
    private Integer strokeColor; 
    private Paint.Join strokeJoin; 
    private float strokeMiter; 


    public CoustomTextView(Context context) { 
     super(context); 
     init(null); 
    } 

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

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

    public void init(AttributeSet attrs) { 

     if (attrs != null) { 
      TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.CoustomTextView); 

      if (a.hasValue(R.styleable.CoustomTextView_strokeColor)) { 
       float strokeWidth = a.getDimensionPixelSize(R.styleable.CoustomTextView_strokeWidth, 1); 
       int strokeColor = a.getColor(R.styleable.CoustomTextView_strokeColor, 0xff000000); 
       float strokeMiter = a.getDimensionPixelSize(R.styleable.CoustomTextView_strokeMiter, 10); 
       Paint.Join strokeJoin = null; 
       switch (a.getInt(R.styleable.CoustomTextView_strokeJoinStyle, 0)) { 
        case (0): 
         strokeJoin = Paint.Join.MITER; 
         break; 
        case (1): 
         strokeJoin = Paint.Join.BEVEL; 
         break; 
        case (2): 
         strokeJoin = Paint.Join.ROUND; 
         break; 
       } 
       this.setStroke(strokeWidth, strokeColor, strokeJoin, strokeMiter); 
      } 
     } 
    } 

    public void setStroke(float width, int color, Paint.Join join, float miter) { 
     strokeWidth = width; 
     strokeColor = color; 
     strokeJoin = join; 
     strokeMiter = miter; 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     int restoreColor = this.getCurrentTextColor(); 
     if (strokeColor != null) { 
      TextPaint paint = this.getPaint(); 
      paint.setStyle(Paint.Style.STROKE); 
      paint.setStrokeJoin(strokeJoin); 
      paint.setStrokeMiter(strokeMiter); 
      this.setTextColor(strokeColor); 
      paint.setStrokeWidth(strokeWidth); 
      super.onDraw(canvas); 
      paint.setStyle(Paint.Style.FILL); 
      this.setTextColor(restoreColor); 
     } 
    } 
} 

Verbrauch:

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     CoustomTextView coustomTextView = (CoustomTextView) findViewById(R.id.pager_title); 
    } 
} 

Layout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@mipmap/background"> 


    <pk.sohail.gallerytest.activity.CoustomTextView 
     android:id="@+id/pager_title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:gravity="center" 
     android:text="@string/txt_title_photo_gallery" 
     android:textColor="@color/white" 
     android:textSize="30dp" 
     android:textStyle="bold" 
     app:outerShadowRadius="10dp" 
     app:strokeColor="@color/title_text_color" 
     app:strokeJoinStyle="miter" 
     app:strokeWidth="2dp" /> 

</RelativeLayout> 

attars:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <declare-styleable name="CoustomTextView"> 

     <attr name="outerShadowRadius" format="dimension" /> 
     <attr name="strokeWidth" format="dimension" /> 
     <attr name="strokeMiter" format="dimension" /> 
     <attr name="strokeColor" format="color" /> 
     <attr name="strokeJoinStyle"> 
      <enum name="miter" value="0" /> 
      <enum name="bevel" value="1" /> 
      <enum name="round" value="2" /> 
     </attr> 
    </declare-styleable> 

</resources> 
Programmatische

:

CoustomTextView mtxt_name = (CoustomTextView) findViewById(R.id.pager_title); 

Verwenden setStroke(); Verfahren vor setText();

+0

Große Antwort! :) – basic

+0

danke. Es funktioniert super :) – adhi