0

SquareTextViewを使用して、マップマーカーのクラスタアイコンのカスタム字体を設定しようとしています。どのようなクラスのTextViewを拡張するのはandroid-maps-utils-amapですか? DefaultClusterRendererでこのコードを使用してカスタム書体を設定しますが、効果はありません。だから私はSquareTextViewSquareTextView TypeFaceの設定方法

private SquareTextView makeSquareTextView(Context context) { 
    SquareTextView squareTextView = new SquareTextView(context);    
    Typeface typeface = Typeface.createFromAsset(context.getAssets(), "whatever.ttf"); 
    squareTextView.setTypeface(typeface); 
} 

の書体を変更するには何をする必要があるかを理解するために私を助けそして、これはSquareTextViewのソースコードでください:

package com.amap.api.maps2d.ui; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.util.AttributeSet; 
import android.widget.TextView; 

public class SquareTextView extends TextView { 
    private int mOffsetTop = 0; 
    private int mOffsetLeft = 0; 

    public SquareTextView(Context context) { 
     super(context); 
    } 

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

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

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     int width = getMeasuredWidth(); 
     int height = getMeasuredHeight(); 
     int dimension = Math.max(width, height); 
     if (width > height) { 
      mOffsetTop = width - height; 
      mOffsetLeft = 0; 
     } else { 
      mOffsetTop = 0; 
      mOffsetLeft = height - width; 
     } 
     setMeasuredDimension(dimension, dimension); 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     canvas.translate(mOffsetLeft/2, mOffsetTop/2); 
     super.draw(canvas); 
    } 
} 
+0

は、あなたが資産ディレクトリではなく、任意のサブディレクトリに 'Roboto-Italic.ttf'ファイルを持っていますか?また、 'Calligraphy'を試してみると、このワイルドカードをスキップすることができます。アプリケーションワイドフォントを設定する場合は – Sourabh

答えて

0

私はTextViewのための私の独自の実装を持っていると私は使用以下のような書体を設定すること、それが私の仕事:

だから、
public class MyNewTextView extends TextView { 
private int mOffsetTop = 0; 
private int mOffsetLeft = 0; 

public MyNewTextView(Context context) { 
    super(context); 
} 

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

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

@Override 
public void setTypeface(Typeface tf, int style) { 
    super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/whatever.ttf"), style); 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    int width = getMeasuredWidth(); 
    int height = getMeasuredHeight(); 
    int dimension = Math.max(width, height); 
    if (width > height) { 
     mOffsetTop = width - height; 
     mOffsetLeft = 0; 
    } else { 
     mOffsetTop = 0; 
     mOffsetLeft = height - width; 
    } 
    setMeasuredDimension(dimension, dimension); 
} 

@Override 
public void draw(Canvas canvas) { 
    canvas.translate(mOffsetLeft/2, mOffsetTop/2); 
    super.draw(canvas); 
} 
} 

がSquareTextView

ためsetTypefaceを()をオーバーライドしてみてください
+0

ですが、SquareTextViewはライブラリクラスなので編集できません。私の場合はTextViewを使用できません。 SquareTextViewより – Kar4

+0

SquareTextViewの実装では、onMeasure()とonDraw()の実装をOwnTextViewにコピーして、私の編集をチェックしてください。大丈夫ですか? – Amt87

+1

ありがとう、私はそれを使用する必要がありますので、クラスターのtextviewのフォントを変更するために使用していますDefaultClusterRendererどこでは、TextViewを拡張するクラスを使用することはできませんが(たとえ2-ndの答えのように)それが再び動作しない場合 – Kar4

0

SquareTextViewの独自の実装がこれを試してみてください行います

public class MySquareTextView extends SquareTextView { 

    public MySquareTextView (Context context) { 
     super(context); 
     setTypeface(); 
    } 

    public MySquareTextView (Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setTypeface(); 
    } 

    public MySquareTextView (Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     setTypeface(); 
    } 


    public void setTypeface(){ 
     setTypeface(Typeface.createFromAsset(getAssets(), "Roboto-Italic.ttf")); 
    } 
} 
+0

squareTextView.setTypeface(typeface);これは、mySquareTextView.setTypeface(書体)を意味します。実際には両方のケースで同じものを使用しているので、あまりにもうまくいかないでしょう – Kar4

+0

試しましたか?私のアプリケーションには同じコードがあり、動作しています。あなたの 'font'パスよりもうまくいかない場合は間違っています。 –

+0

はい、私はして、結果とパスは大丈夫です、あなたはマーカーのクラスターアイコンのテキストの書体を変更するためにそれを使用していますか? – Kar4