有时候Android自带的控件无法满足我们的某些要求,这时就需要我们自定义控件来实现这些功能。比如需要一个TextView里的字倾斜一定的角度,就需要自定义TextView。
package com.leigo.ratatetextview;
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 Administrator on 2014/9/9.
*/
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;
}
}
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="RotateTextView">
<attr name="degree" format="dimension" />
</declare-styleable>
</resources>用法:
1.xml
<com.leigo.ratatetextview.RotateTextView xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/text" android:text="@string/hello_world" app:degree="10dp" android:padding="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /></span>
RotateTextView mText = (RotateTextView) findViewById (R.id.text); mText.setDegrees(10);</span>
https://coding.net/u/leigo/p/RotateTextView/git
原文地址:http://blog.csdn.net/le_go/article/details/39178563