AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.cctvjiatao.xmlset"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="14"        android:targetSdkVersion="21" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name=".MainActivity2"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>

com.cctvjiatao.xmlset.MainActivity2

package com.cctvjiatao.xmlset;import android.app.Activity;import android.os.Bundle;public class MainActivity2 extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);}}

activity_main2.xml

<!-- xmlns:jiatao="http://schemas.android.com/apk/res/com.cctvjiatao.xmlset" xmlns:[自定义命名] = "http://schemas.android.com/apk/res/[本xml所属activity的包名]"--><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    xmlns:jiatao="http://schemas.android.com/apk/res/com.cctvjiatao.xmlset"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.cctvjiatao.xmlset.MainActivity2" >    <!-- 一定要写正确自定义View的“包名+类名”,不然汇报错:Binary XML file line #9: Error inflating class.. -->    <com.cctvjiatao.xmlset.TestView2        android:layout_width="match_parent"        android:layout_height="match_parent"        jiatao:isScroll="true"        jiatao:linesNum="10" >    </com.cctvjiatao.xmlset.TestView2></RelativeLayout>

com.cctvjiatao.xmlset.BaseView

package com.cctvjiatao.xmlset;import android.content.Context;import android.graphics.Canvas;import android.util.AttributeSet;import android.view.View;/** * @作者: jiatao * @修改时间:2016-3-12 下午9:12:42  * @包名:com.cctvjiatao.xmlset * @文件名:BaseView.java * @版权声明:www.cctvjiatao.com * @功能: 自定义View的封装类 */public abstract class BaseView extends View {private DrawThread thread;private boolean isRunning = true;private long time = 30;public BaseView(Context context) {super(context);}public BaseView(Context context, AttributeSet attrs) {super(context, attrs);}protected abstract void drawSub(Canvas canvas);protected abstract void drawLogic();@Overrideprotected void onDraw(Canvas canvas) {    if(thread == null){    thread = new DrawThread();    thread.start();    }else{    drawSub(canvas);    }}@Overrideprotected void onDetachedFromWindow() {    super.onDetachedFromWindow();    isRunning = false;}class DrawThread extends Thread{@Overridepublic void run() {while(isRunning){drawLogic();postInvalidate();try {                Thread.sleep(time);                } catch (InterruptedException e) {                e.printStackTrace();                }}}}}

com.cctvjiatao.xmlset.TestView2

package com.cctvjiatao.xmlset;import com.cctvjiatao.xmlset.R;import com.cctvjiatao.xmlset.R.styleable;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Paint;import android.util.AttributeSet;/** * @作者: jiatao * @修改时间:2016-3-12 下午9:24:29  * @包名:com.cctvjiatao.xmlset * @文件名:TestView.java * @版权声明:com.cctvjiatao.xmlset.test * @功能: 测试类,在xml中设置属性 */public class TestView2 extends BaseView {private int linesNum = 0;private boolean isScroll = false;private float xStart = 0;private Paint paint = new Paint();public TestView2(Context context) {super(context);}public TestView2(Context context, AttributeSet attrs) {super(context, attrs);TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.JiataoNumText);linesNum = ta.getInt(R.styleable.JiataoNumText_linesNum, 1);isScroll = ta.getBoolean(R.styleable.JiataoNumText_isScroll, false);ta.recycle();}@Overrideprotected void drawSub(Canvas canvas) {for(int i=0; i<linesNum; i++){int textSize = 30+i;paint.setTextSize(textSize);canvas.drawText("cctvjiatao", xStart, textSize*(1+i), paint);}}@Overrideprotected void drawLogic() {if(isScroll){xStart += 3;if(xStart > getWidth()){xStart = 0 - paint.measureText("cctvjiatao");}}else{return;}}}
res/values/attrs.xml(新建的xml)

<?xml version="1.0" encoding="utf-8"?><resources>    <declare-styleable name="JiataoNumText">        <attr name="linesNum" format="integer"/>        <attr name="isScroll" format="boolean" />    </declare-styleable></resources>

运行结果:



更多相关文章

  1. Android(安卓)监听锁屏、解锁、开屏 功能代码
  2. Qt在Android平台上实现html转PDF的功能
  3. Android(安卓)Calendar的学习与运用
  4. Android(安卓)Code Review
  5. ImageLoader修改后
  6. MT6735修改听筒增益
  7. Android(安卓)监听开机完成广播,完成监听SIM卡功能
  8. Androidstudio实现手机摇一摇功能
  9. 佛祖保佑 永无BUG 永不修改

随机推荐

  1. 完成android的manven项目管理
  2. Android - 解决onSaveInstanceState的Bug
  3. 常用Android系统调用
  4. 1.android 开发学习---Intent 用法
  5. Android常用颜色值
  6. EditText保留两位小数并输入不超过最大值
  7. 2.4.4 进度条
  8. 【Android】使用Git控制Android程序的git
  9. 启动 flutter项目时报Could not find com
  10. Android工具包