自定义控件(一)

此方法为最基本的定义控件的写法

首先定义资源文件,attrs中定义控件属性:

<span style="font-size:14px;"><resources>
    <declare-styleable name="MyView">                <!-- name为继承view类名,千万不要同系统类名相同 -->
        <attr name="textcontent" format="string"/>             <!-- name自定义属性名,format选择资源类型 -->
        <attr name="textcolor" format="color"/>
        <attr name="textbankground" format="reference"/>
        <attr name="isshow" format="boolean"></attr>
        <attr name="textsize" format="dimension"/>
        <attr name="textlocation" format="enum">
            <enum name="center" value="0"/>
            <enum name="left" value="1"/>
            <enum name="right" value="2"/>
        </attr>
    </declare-styleable>
   
</resources></span>
然后在xml布局中引用此资源:

在引用时布局中加入行代码:

<span style="font-size:14px;"> xmlns:app="http://schemas.android.com/apk/res-auto"</span>

<pre name="code" class="html"><span style="font-size:14px;"><costomview.MyView                       <!-- 类名加包名 -->
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:isshow="true"
        app:textbankground="@android:color/holo_blue_light"
        app:textcontent="自定义控件测试"
        app:textlocation="center"
        app:textsize="20sp"
        /></span>

 
继承view控件的类实现: 

<span style="font-size:14px;">public class MyView extends View {
    private String textContent;
    private Drawable bankground;
    private int location;

    public MyView(Context context) {
        super(context);
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);

        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyView);
        textContent = ta.getString(R.styleable.MyView_textcontent);                //获取布局中置的值
        bankground = ta.getDrawable(R.styleable.MyView_textbankground);
    }

    public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

</span>
<span style="font-size:14px;"><span style="white-space:pre">	</span>//绘制调用方法
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint paint = new Paint();
        paint.setColor(Color.RED);          //设置描绘颜色,如果上面取到了值,可以选择设置给paint
        paint.setTextSize(40);            //设置字体大小


        canvas.drawText(textContent,120,240,paint);              //描绘字体,及位置,最好采用从组件大小获取值,不要随意写数据
//        canvas.drawPoint(100,200,paint);

    }
    /*
     * 检测View组件及其子组件的大小
     * */
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    }


    @Override
    public boolean onTouchEvent(MotionEvent event) {
      </span><pre name="code" class="java"><span style="font-size:14px;"><span style="white-space:pre">		</span>switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                Logs.v("按下事件");
                break;
            case MotionEvent.ACTION_UP:
                Logs.v("弹起事件");
                break;
            case MotionEvent.ACTION_MOVE:
                Logs.v("移动事件");
                break;
        }
        return true;       //此处设为true</span>

}}

 
activity实现:在oncreat中 
<span style="font-size:14px;"> setContentView(R.layout.myview_layout);</span>

此时就实现了一个最简单,最原始的效果





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值