自定義View
在安卓開發中,自定義控件的需求很多很多,而掌握自定義控件稱得上是開發人員的入門技術啦。而自定義控件也稱得上是十分強大的一個操作。它可以實現傳統控件和系統控件所不能實現的效果。比如最基本的圓形圖片和跑馬燈效果,對於自定義控件來說就是分分鐘的事。今天我做了一個小demo,實現了這跑馬燈效果,圓形圖片的一百度一大把,就不寫那個了。
GitHub地址:https://github.com/cctxwan/ZDYKJ
CSDN地址:https://download.csdn.net/download/qq_35840038/11057580
各種效果圖如下:
在這我就不多廢話啦,直接上代碼(只上傳滾動textview的代碼,其他功能可以下載源碼進行查看)
package com.cc.youku.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
/**
* 滾動的TextView
* 這裏是寫死的文字,如果想要動態傳入的話,從構造器傳入可以實現
*/
public class ScrollTextView extends View {
//畫筆
private Paint paint = new Paint();
//默認從0開始滾動
private float i = 0;
//自定義線程,讓其通過對i值的修改達到滾動的效果
private MyThread thread;
/**
* 界面直接調用用這個構造器
* @param context
*/
public ScrollTextView(Context context) {
super(context);
}
/**
* XML裏面用這個構造器
* @param context
* @param attrs
*/
public ScrollTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
//設置滾動字體大小
paint.setTextSize(50);
//實現一個textview
canvas.drawText("我是滾動的TextView", i, 50, paint);
//實例化自定義線程並啓動
if(thread == null){
thread = new MyThread();
thread.start();
}
}
/**
* 自定義線程
*/
class MyThread extends Thread{
@Override
public void run() {
super.run();
//死循環
while (true){
//對i值每次修改
i += 3;
//當i大於getWidth()(屏幕寬度)時,說明已經看不到了
if(i > getWidth()){
//設置i的大小讓其通過paint的mea方法是計算文字長度,達到效果
i = 0 - paint.measureText("我是滾動的TextView");
}
//view提供的刷新繪製方法的方法
postInvalidate();
try {
//隔30ms執行
this.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
注:這裏是寫死的文字,如果想要動態傳入的話,從構造器傳入可以實現
附上demo源碼
GitHub地址:https://github.com/cctxwan/ZDYKJ
q:486789970
email:[email protected]
如果有什麼問題,歡迎大家指導。並相互聯繫,希望能夠通過文章互相學習。
---財財親筆