博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Textview 文本旋转,倾斜
阅读量:6300 次
发布时间:2019-06-22

本文共 4416 字,大约阅读时间需要 14 分钟。

有时候Android自带的控件无法满足我们的某些要求,这时就需要我们自定义控件来实现这些功能。比如需要一个TextView里的字倾斜一定的角度,就需要自定义TextView。

代码如下:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package
com.android.textviewrotatedemo;
 
import
android.content.Context;
import
android.content.res.TypedArray;
import
android.graphics.Canvas;
import
android.util.AttributeSet;
import
android.view.Gravity;
import
android.widget.TextView;
 
/**
 
* Created by zhenxixianzai on 2015/5/5.
 
*/
public
class
RotateTextView
extends
TextView {
    
private
static
final
int
DEFAULT_DEGREES =
0
;
    
private
int
mDegrees;
 
    
public
RotateTextView(Context context) {
        
super
(context,
null
);
    
}
 
    
public
RotateTextView(Context context, AttributeSet attrs) {
        
super
(context, attrs, android.R.attr.textViewStyle);
        
this
.setGravity(Gravity.CENTER);
        
TypedArray a = context.obtainStyledAttributes(attrs,
                
R.styleable.RotateTextView);
        
mDegrees = a.getDimensionPixelSize(R.styleable.RotateTextView_degree,
                
DEFAULT_DEGREES);
        
a.recycle();
    
}
 
    
@Override
    
protected
void
onMeasure(
int
widthMeasureSpec,
int
heightMeasureSpec) {
        
super
.onMeasure(widthMeasureSpec, heightMeasureSpec);
        
setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth());
    
}
 
    
@Override
    
protected
void
onDraw(Canvas canvas) {
        
canvas.save();
        
canvas.translate(getCompoundPaddingLeft(), getExtendedPaddingTop());
        
canvas.rotate(mDegrees,
this
.getWidth() / 2f,
this
.getHeight() / 2f);
        
super
.onDraw(canvas);
        
canvas.restore();
    
}
 
    
public
void
setDegrees(
int
degrees) {
        
mDegrees = degrees;
    
}
}

styles 如下:

 

 

1
2
3
<declare-styleable name=
"RotateTextView"
>
         
    
</attr></declare-styleable>

 

 

用法:

1
2
3
4
5
6
7
8
9
10
<linearlayout android:layout_height=
"match_parent"
android:layout_width=
"match_parent"
android:orientation=
"vertical"
xmlns:android=
""
xmlns:tools=
""
>
 
    
<com.android.textviewrotatedemo.rotatetextview android:autolink=
"all"
android:gravity=
"center"
android:id=
"@+id/ceshi"
android:layout_gravity=
"center"
android:layout_height=
"wrap_content"
android:layout_width=
"wrap_content"
android:text=
""
>
    
<com.android.textviewrotatedemo.rotatetextview android:autolink=
"all"
android:gravity=
"center"
android:id=
"@+id/ceshi1"
android:layout_gravity=
"center"
android:layout_height=
"wrap_content"
android:layout_width=
"wrap_content"
android:text=
"测试测试测试"
>
    
<com.android.textviewrotatedemo.rotatetextview android:autolink=
"all"
android:gravity=
"center"
android:id=
"@+id/ceshi2"
android:layout_gravity=
"center"
android:layout_height=
"wrap_content"
android:layout_width=
"wrap_content"
android:text=
"测试测试测试"
>
    
<com.android.textviewrotatedemo.rotatetextview android:autolink=
"all"
android:gravity=
"center"
android:id=
"@+id/ceshi3"
android:layout_gravity=
"center"
android:layout_height=
"wrap_content"
android:layout_width=
"wrap_content"
android:text=
"测试测试测试4"
>
    
<com.android.textviewrotatedemo.rotatetextview android:autolink=
"all"
android:gravity=
"center"
android:id=
"@+id/ceshi4"
android:layout_gravity=
"center"
android:layout_height=
"wrap_content"
android:layout_width=
"wrap_content"
android:text=
"测试测试测试"
>
 
 
</com.android.textviewrotatedemo.rotatetextview></com.android.textviewrotatedemo.rotatetextview></com.android.textviewrotatedemo.rotatetextview></com.android.textviewrotatedemo.rotatetextview></com.android.textviewrotatedemo.rotatetextview></linearlayout>

 部分:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package
com.android.textviewrotatedemo;
 
import
android.app.Activity;
import
android.os.Bundle;
 
public
class
MainActivity
extends
Activity {
    
private
RotateTextView mTextView;
    
private
RotateTextView mTextView1;
    
private
RotateTextView mTextView2;
    
private
RotateTextView mTextView3;
    
private
RotateTextView mTextView4;
    
private
RotateTextView mTextView5;
 
    
@Override
    
protected
void
onCreate(Bundle savedInstanceState) {
        
super
.onCreate(savedInstanceState);
        
setContentView(R.layout.activity_main);
        
mTextView = (RotateTextView) findViewById(R.id.ceshi);
        
mTextView.setDegrees(
10
);
        
mTextView1 = (RotateTextView) findViewById(R.id.ceshi1);
        
mTextView1.setDegrees(
350
);
        
mTextView2 = (RotateTextView) findViewById(R.id.ceshi2);
        
mTextView2.setDegrees(
180
);
        
mTextView3 = (RotateTextView) findViewById(R.id.ceshi3);
        
mTextView3.setDegrees(
90
);
        
mTextView4 = (RotateTextView) findViewById(R.id.ceshi4);
        
mTextView4.setDegrees(
290
);
 
    
}
}

附上效果图:

\

 

项目地址:
https://coding.net/u/leigo/p/RotateTextView/git

转载地址:http://hfgta.baihongyu.com/

你可能感兴趣的文章
Windows10 bypassUAC绕过用户账户控制
查看>>
千味央厨获1亿元融资,京东领投、绝味食品跟投 ...
查看>>
Python零基础学习笔记(三十八)—— 递归方法、栈、队列模拟遍历目录 ...
查看>>
Android 学习资源大全集汇总(github持续更新)
查看>>
中国联通与阿里云达成合作,推动5G+新媒体产业发展
查看>>
生命不止,奋斗不息
查看>>
三分钟带你读懂 BERT
查看>>
java集合之ConcurrentSkipListSet源码分析——Set大汇总
查看>>
马斯克:只要10万美元,带你移居火星
查看>>
“聆听”升级,阿里云智能喜迎首席聆听官
查看>>
盘它!40篇+阿里技术经典案例,看完必收藏(上)
查看>>
Java总结 - List实现类Vector&Stack
查看>>
shell使用lftp连接ftp和sftp,并可以指定私钥
查看>>
有了钉钉智能前台 美女前台可能要失业了
查看>>
mica 中 test 扩展 mica-boot-test 单元测试插件
查看>>
用户态和内核态的区别
查看>>
实时计算在天猫双十一大屏中的应用
查看>>
护卫神全能镜像上如何快速安装SQL SERVER数据库呢?
查看>>
Ubuntu Core 给物联网提供更多安全支持
查看>>
Ajax技术实战操练课堂学习笔记
查看>>