以圆形布局显示TEXT

时间:2018-06-27 15:10:36

标签: android

我想知道android studio中是否可以按照圆形显示文本。

正常结果
enter image description here

最终结果
enter image description here

布局:

<LinearLayout
    android:id="@+id/layout2"
    android:layout_width="260dp"
    android:layout_height="250dp"
    android:background="@drawable/shape"
    android:textColor="#ffffff"
    android:gravity="center_vertical|center_horizontal"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true">

    <TextView
        android:background="@drawable/shape"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Text"/>

</LinearLayout>

AND shape.xml

 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners
    android:radius="130dp"
    android:bottomRightRadius="0dp"
    android:topRightRadius="0dp"

    />
<solid
    android:color="@color/colorPrimary5"
    />
<padding
    android:left="8dp"
    android:top="0dp"
    android:right="8dp"
    android:bottom="0dp"
    />

2 个答案:

答案 0 :(得分:0)

尝试一下 activity_main

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent" >
    <TextView
        android:id="@+id/num_txt"
        android:layout_width="185dp"
        android:layout_height="185dp"

        android:layout_alignParentTop="true"
        android:layout_marginTop="163dp"
        android:background="@drawable/bg_red"
        android:gravity="center"
        android:text="My name is NON"
        android:textColor="#FFFFFF"
        android:layout_marginLeft="10dp"
        android:textSize="10dp" />

    <TextView
        android:id="@+id/TextView02"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/TextView01"
        android:layout_marginRight="90dp"
        android:layout_marginTop="122dp"
        android:background="@drawable/bg_red"
        android:gravity="center"
        android:text="My name is NON"
        android:textColor="#FFFFFF"
        android:textSize="10dp" />

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_alignTop="@+id/num_txt"
        android:layout_toRightOf="@+id/num_txt"
        android:background="@drawable/bg_red"
        android:gravity="center"
        android:text="My name is NON"
        android:textColor="#FFFFFF"
        android:textSize="10dp" />

</RelativeLayout>

创建X.M.L.文件在名为“ bg_red”的可绘制文件夹中的文件中

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <corners android:radius="10dip"/>
    <stroke android:color="#FF0000" android:width="5dip"/>
    <solid android:color="#FF0000"/>
</shape>

Output

答案 1 :(得分:0)

尝试以下操作,可能会有所帮助。

1)CircularTextView.class:----------

来源:https://github.com/lisawray/circletextview

public class CircleTextView extends View {

private int maxLines;
private TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
private CharSequence charSequence = "";
private int[] leftIndents;
private int[] rightIndents;
private StaticLayout layout;

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

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

public CircleTextView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

@TargetApi(Build.VERSION_CODES.LOLLIPOP) public CircleTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
}

public int getRightIndent(int line, int width, int height) {
    return getIndent(line, width, height);
}

public int getLeftIndent(int line, int width, int height) {
    return getIndent(line, width, height);
}

public int getIndent(int line, int width, int height) {
    int r = (int) (getSmallestDimension(width, height) / 2f);
    float y = (r - line * getLineHeight());
    return (int) (width / 2f - Math.sqrt((r * r) - y * y));
}

public void setTextSize(@DimenRes int dimenResId) {
    textPaint.setTextSize(getPixels(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(dimenResId)));
}

int getPixels(int unit, float size) {
    DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
    return (int) TypedValue.applyDimension(unit, size, metrics);
}

@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);

    maxLines = (int) Math.floor(getSmallestDimension(w, h) / getLineHeight());
    leftIndents = new int[maxLines];
    rightIndents = new int[maxLines];
    for (int line = 0; line < maxLines; line++) {
        leftIndents[line] = getLeftIndent(line, w, h);
        rightIndents[line] = getRightIndent(line, w, h);
    }
    makeNewLayout();
}

public void setText(CharSequence charSequence) {
    this.charSequence = charSequence;
    makeNewLayout();
}

private void makeNewLayout() {
    StaticLayout.Builder builder = StaticLayout.Builder.obtain(charSequence, 0, charSequence.length(), textPaint, getMeasuredWidth());
    builder.setIndents(leftIndents, rightIndents);
    builder.setMaxLines(maxLines);
    layout = builder.build();
}

@Override protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    layout.draw(canvas);
}

private int getSmallestDimension(int width, int height) {
    return Math.min(width, height);
}

public float getLineHeight() {
    return textPaint.getFontMetrics().bottom - textPaint.getFontMetrics().top;
}

public TextPaint getTextPaint() {
    return textPaint;
}
}

2)MainActivity_.class:-----

public class MainActivity_ extends AppCompatActivity {

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

    CircleTextView textView = (CircleTextView) findViewById(R.id.circle_text_view);
        textView.setTextSize(R.dimen.txt_size); // declare txt_size in dimens (14sp for example).

    textView.setText("This is aasdadadad  nice test to insure the reliability of this shit fdgggh hfhjg khk kjghk lh lhlj hl hllh ; ;l hkjjl hlhl hl lhljh lhl hhlh hlh llh lhhj l llhl lh l lh lh");

}
}

3)layout7.xml:-------

 <RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

    <View
        android:background="@drawable/s"
        android:layout_width="205dp"
        android:layout_height="205dp"
        android:id="@+id/frame"
        android:layout_centerInParent="true"
        android:gravity="center" />


<com.example.admin.accessories.CircleTextView
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:id="@+id/circle_text_view"
    android:layout_centerInParent="true"
    android:gravity="center">
    </com.example.admin.accessories.CircleTextView>


</RelativeLayout>

4)s.xml:---------

<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"
android:innerRadius="0dp"
android:thickness="100dp"
android:useLevel="false">
<solid
    android:color="@android:color/holo_red_dark"/>
</shape>

5)输出:---------

Output

6)注意:我不是CircleTextView类的代码的作者。因此,请单击上面的链接以找到有关该项目的更多详细信息(错误增强功能...)。