Android自定義View 屬性新增
昨天寫的自定義View,所有的屬性都是寫死的,擴充性基本為零。今天講解自定義View屬性的設定,首先在res的values資料夾下建立一個attrs.xml檔案。程式碼如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="ScrollTextView">
<attr name="textSize" format="dimension"></attr>
<attr name="textColor" format="color"></attr>
<attr name="textString" format="string"></attr>
<attr name="scrollVelocity" format="enum">
<enum name="slow" value="1"></enum>
<enum name="midd" value="2"></enum>
<enum name="fast" value="3"></enum>
</attr>
</declare-styleable>
</resources>
這裡新增了四個屬性,其中scrollVelocity設定為列舉型別,有三個屬性值。在自定義控制元件裡要獲取這些屬性值,自定義View程式碼如下:
public class ScrollTextView extends View {
private Paint paint;
private int x = 0;
private MyThread myThread;
private int textSize;
private int color;
private int value;
private int speed;
private String text;
public ScrollTextView(Context context) {
this(context, null);
init();
}
public ScrollTextView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray ta = context.obtainStyledAttributes(attrs,
R.styleable.ScrollTextView);
textSize = (int) ta.
getDimension(R.styleable.ScrollTextView_textSize, 45);
color = ta.
getColor(R.styleable.ScrollTextView_textColor, Color.RED);
value = ta.
getInt(R.styleable.ScrollTextView_scrollVelocity, 0);
text = ta.
getString(R.styleable.ScrollTextView_textString);
if (value == 1) {
speed = 1;
} else if (value == 2) {
speed = 2;
} else {
speed = 3;
}
init();
ta.recycle();
}
private void init() {
paint = new Paint();
paint.setTextSize(textSize);
paint.setColor(color);
if (myThread == null) {
myThread = new MyThread();
myThread.start();
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawText(text, x, 70, paint);
}
class MyThread extends Thread {
@Override
public void run() {
while (true) {
x += speed;
if (x > getWidth()) {
x = (int) -paint.measureText(text);
}
postInvalidate();
try {
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
在構造方法裡呼叫obtainStyledAttributes方法得到TypeArray物件,就可以以此獲得各個屬性值了。
在activity_main.xml裡呼叫這個控制元件和新增自定義的屬性,如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yayun="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ad.scrolltextview.ScrollTextView
android:layout_width="match_parent"
android:layout_height="60dp"
yayun:scrollVelocity="slow"
yayun:textColor="@color/colorPrimaryDark"
yayun:textSize="80px"
yayun:textString="TANGTANGTANG" />
</RelativeLayout>
MainActivity.java程式碼如下:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
執行例項如下:
可以在佈局檔案中修改屬性如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yayun="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ad.scrolltextview.ScrollTextView
android:layout_width="match_parent"
android:layout_height="60dp"
yayun:scrollVelocity="fast"
yayun:textColor="@color/colorAccent"
yayun:textSize="40px"
yayun:textString="TANGBAOBAO" />
</RelativeLayout>
再次執行例項如下:
如果您喜歡,請轉發至朋友圈,在此感謝。
相關文章
- Android 自定義View:深入理解自定義屬性(七)AndroidView
- Android 自定義View:屬性動畫(六)AndroidView動畫
- 【朝花夕拾】Android自定義View篇之(四)自定義View的三種實現方式及自定義屬性詳解AndroidView
- 給Product新增自定義屬性
- HenCoder Android 自定義 View 1-6: 屬性動畫(上手篇)AndroidView動畫
- Android自定義View:View(二)AndroidView
- ubuntu下OpenLDAP新增自定義屬性UbuntuLDA
- Android自定義View整合AndroidView
- Android自定義view-自繪ViewAndroidView
- 自定義View:Paint的常用屬性介紹及使用ViewAI
- 重拾Android自定義ViewAndroidView
- Android自定義View:ViewGroup(三)AndroidView
- Android 自定義 View 之 LeavesLoadingAndroidView
- android自定義view(自定義數字鍵盤)AndroidView
- 【朝花夕拾】Android自定義View篇之(十一)View的滑動,彈性滑動與自定義PagerViewAndroidView
- Python日誌記錄中新增自定義屬性Python
- Android 自定義View基礎(一)AndroidView
- Android自定義View之分貝儀AndroidView
- Android自定義View之捲尺AndroidView
- android自定義View——座標系AndroidView
- Android自定義View注意事項AndroidView
- Android自定義View-卷軸AndroidView
- Android自定義View 水波氣泡AndroidView
- Android 自定義View 點贊效果AndroidView
- Android 自定義 View 最少必要知識AndroidView
- Android 自定義View 滑動解鎖AndroidView
- Android自定義View播放Gif動畫AndroidView動畫
- Android 自定義 View 實戰之 PuzzleViewAndroidView
- Android 自定義 View 之入門篇AndroidView
- Android 自定義View之下雨動畫AndroidView動畫
- Android自定義View---驗證碼AndroidView
- Android自定義view之emoji鍵盤AndroidView
- Android自定義View之Canvas的使用AndroidViewCanvas
- Android中View自定義XML屬性詳解以及R.attr與R.styleable的區別AndroidViewXML
- CSS 自定義屬性指北CSS
- data-* 自定義屬性
- 帶你深入理解Android中的自定義屬性!!!Android
- Android 入門(三)簡單自定義 ViewAndroidView
- Android自定義View之定點寫文字AndroidView