• 自定义View


    1.首先,在values文件夹下定义一个atts.xml的文件,描述自定义的控件的属性,在values/attrs.xml中的代码如下:

     1 <?xml version="1.0" encoding="utf-8"?>
    2 <resources>
    3 <declare-styleable name="TestView">
    4 <attr name="textColor" format="color" />
    5 <attr name="textSize" format="dimension"/>
    6 <attr name="imgBackground" format="integer"/>
    7 <attr name="textPaddionLeft" format="dimension"/>
    8 <attr name="textPaddingTop" format="dimension"/>
    9 </declare-styleable>
    10 </resources>

    2.其次,定义一个继承自View的类,如:TestView,使其实现View的方法

     1 package com.vanceinfo.testview;
    2
    3 import android.content.Context;
    4 import android.content.res.TypedArray;
    5 import android.graphics.Canvas;
    6 import android.graphics.Color;
    7 import android.graphics.Paint;
    8 import android.util.AttributeSet;
    9 import android.view.View;
    10
    11 public class TestView extends View
    12 {
    13 private Paint mPaint;
    14
    15 private Context mContext;
    16
    17 private String mStr;
    18
    19 public TestView(Context context, AttributeSet attrs)
    20 {
    21 // 构造方法;根据需要实现继承自View的方法
    22 super(context, attrs);
    23 mContext = context;
    24 initTestView();
    25 // 对于我们自定义的类中,我们需要使用一个名为obtainStyledAttributes的方法来获取我们的定义
    26 TypedArray params = context.obtainStyledAttributes(attrs, R.styleable.TestView);
    27 // 得到自定义控件的属性值。
    28 int backgroundId = params.getResourceId(R.styleable.TestView_imgBackground, 0);
    29 if (backgroundId != 0)
    30 {
    31 setBackgroundResource(backgroundId);
    32 int textColor = params.getColor(R.styleable.TestView_textColor, 0XFFFFFFFF);
    33 setTextColor(textColor);
    34 float textSize = params.getDimension(R.styleable.TestView_textSize, 36);
    35 setTextSize(textSize);
    36 float padingLeft = params.getDimension(R.styleable.TestView_textPaddionLeft, 41);
    37 float padingTop = params.getDimension(R.styleable.TestView_textPaddingTop, 21);
    38 setPaddings(padingLeft, padingTop);
    39 }
    40 }
    41
    42 @Override
    43 protected void onDraw(Canvas canvas)
    44 {
    45 super.onDraw(canvas);
    46 if (mStr != null)
    47 {
    48 canvas.drawText(mStr, 30, 60, mPaint);
    49 }
    50 }
    51
    52 private void setPaddings(float padingLeft, float padingTop)
    53 {
    54 setPadding((int) padingLeft, (int) padingTop, 0, 0);
    55 }
    56
    57 private void setTextColor(int textColor)
    58 {
    59 mPaint.setColor(0XFFAABBCC);
    60 }
    61
    62 void setText(String text)
    63 {
    64 mStr = text;
    65 }
    66
    67 private void setTextSize(float textSize)
    68 {
    69 mPaint.setTextSize(textSize);
    70 }
    71
    72 private void initTestView()
    73 {
    74 mPaint = new Paint();
    75 mPaint.setColor(Color.WHITE);
    76 }
    77
    78 }

    3.然后,在Layout文件中应用该自定义的view,如下:

     1 <?xml version="1.0" encoding="utf-8"?>
    2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3 xmlns:app="http://schmeas.android.com/apk/res/ com.vanceinfo.testview.TestView"
    4 android:orientation="vertical"
    5 android:layout_width="fill_parent"
    6 android:layout_height="fill_parent"
    7 >
    8 <com.vanceinfo.testview.TestView
    9 android:id="@+id/testview"
    10 android:layout_width="fill_parent"
    11 android:layout_height="fill_parent"
    12 android:text="@string/hello"
    13 app:textColor="#FFFFFFFF"
    14 app:textSize="40dip"
    15 app:textPaddingLeft="40dip"
    16 app:textPaddingTop="40dip"
    17 app:imgBackground="@drawable/beginhelp1"
    18 />
    19 </LinearLayout>

    4.然后就是使用了,在自己的Activity 中

     1 package com.vanceinfo.testview;
    2
    3 import android.app.Activity;
    4 import android.os.Bundle;
    5
    6 public class TestViewActivity extends Activity
    7 {
    8 /** Called when the activity is first created. */
    9 @Override
    10 public void onCreate(Bundle savedInstanceState)
    11 {
    12 super.onCreate(savedInstanceState);
    13 setContentView(R.layout.main);
    14
    15 TestView mTestView = (TestView) findViewById(R.id.testview);
    16 mTestView.setText("这是自定义的View");
    17 }
    18 }

    5效果图:








  • 相关阅读:
    how to use epoll with python
    tornado ioloop current和instance的一些区别
    网络标准及路由器速度
    C语言接口

    Dalvik 与 ART
    Android学习笔记47-使用HttpClient接口实现网络通信
    Android学习笔记46-使用Post方式提交数据
    Android学习笔记45-JSON数据解析(GSON方式)
    Android学习笔记44-JSON数据解析
  • 原文地址:https://www.cnblogs.com/jh5240/p/2229338.html
Copyright © 2020-2023  润新知