zoukankan      html  css  js  c++  java
  • Android自定义控件之TextView

    转自:http://labs.easymobi.cn/?p=284

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

    右下角的记分牌就是这样的TextView。

    下面介绍怎么自定义TextView。

    首先新建一个继承自TextView的类,取名为RotateTextView:

     1 import  android.content.Context;
     2 import  android.graphics.Canvas;
     3 import  android.util.AttributeSet;
     4 import  android.widget.TextView;
     5 
     6 public  class  RotateTextView  extends  TextView {
     7 private  static  final  String  NAMESPACE = “http://www.ywlx.net/apk/res/easymobi”;
     8 private  static  final  String  ATTR_ROTATE = “rotate”;
     9 private  static  final  int  DEFAULTVALUE_DEGREES = 0;
    10 private  int  degrees ;
    11 public  RotateTextView(Context context, AttributeSet attrs) {
    12 super(context, attrs);
    13 degrees = attrs.getAttributeIntValue(NAMESPACE, ATTR_ROTATE, DEFAULTVALUE_DEGREES);
    14 
    15 }
    16 @Override
    17 protected  void  onDraw(Canvas canvas) {
    18 
    19 canvas.rotate(degrees,getMeasuredWidth()/2,getMeasuredHeight()/2);
    20 super.onDraw(canvas);
    21 }
    22 
    23 }

    一定要有带Context和AttributeSet参数的构造函数,getAttributeIntValue()里第一个参数是命名空间,类似于Android自带的”http://schemas.android.com/apk/res/android”,这里可以自己随便定义。第二个参数是传入的参数的值,这里是旋转地角度。第三个参数是默认值,就是不定义该属性时默认旋转的角度,这里是0度。然后重写onDraw()方法,rotate()作用是以TextView的中心为中点把画布旋转degrees度,这样就实现了字的旋转。

    下一步就是在布局文件中使用自定义的TextView:

    <cn.easymobi.application.memorytest.RotateTextView
    android:layout_width=”wrap_content”
    android:layout_height=”wrap_content”
    android:padding=”8dip”
    android:gravity=”center”
    android:id=”@+id/tvBottom_color”
    android:textSize=”15dip”
    android:textColor=”@color/black”
    easymobi:rotate=”10″
    android:layout_marginTop=”468dip”
    />

    其他属性与普通的TextView相同, easymobi:rotate=”10″指定了旋转10度,但是要注意在头文件加上xmlns:easymobi=”http://www.ywlx.net/apk/res/easymobi”,这个就是RotateTextView中的命名空间的作用。还有一点要注意的就是加上合适的padding,因为这种方法旋转的是TextView里面的字,而不是TextView本身,如果不加padding,有些字就会因为旋转而跑到了TextView外面而不能显示。

    用类似的方法还可以实现各种各样你想要的效果。

  • 相关阅读:
    C
    C
    如何收集项目日志统一发送到kafka中?
    Jmeter压测快速体验
    实时收集Storm日志到ELK集群
    Neo4j的查询语法笔记(二)
    Logstash2.3.4趟坑之集成Redis哨兵模式
    Spring-Boot中如何使用多线程处理任务
    使用SpringBoot1.4.0的一个坑
    手动从零使用ELK构建一套搜索服务
  • 原文地址:https://www.cnblogs.com/luoyanli/p/3208110.html
Copyright © 2011-2022 走看看