• Android中的自定义视图控件


    简介

    当现有控件不能满足需求时,就需要自定义控件。

    自定义控件属性

    自定义控件首先要继承自View,重写两个构造函数。

    第一个是代码中使用的:

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

    另一个是资源解析程序使用的:

    	public MyRect(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyView);
    		int color = ta.getColor(R.styleable.MyView_rect_color, 0xff00ffff);
    		setBackgroundColor(color);
    		ta.recycle();
    	}
    

    也可以给自定义控件指定属性,创建attrs.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <declare-styleable name="MyView">
            <attr name="rect_color" format="color"/>
        </declare-styleable>
    
    </resources>
    

    然后就可以在layout文件中使用了:

        <com.wanxiang.www.learncustomview.MyRect
                android:id="@+id/myrect"
                android:layout_width="100dp"
                android:layout_height="100dp"
                jkxy:rect_color="#FF000FFF"/>
    

    自定义控件皮肤

    可以给button等控件通过background属性设置背景,并根据控件的状态做出改变。定义background为一个xml:

        <Button
                android:text="Button"
                android:background="@drawable/button_skin"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/button"/>
    

      定义这个xml文件内容为:

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_pressed="false" android:drawable="@drawable/btn_normal"></item>
        <item android:state_pressed="true" android:drawable="@drawable/btn_pressed"></item>
    </selector>
    

      即可以实现控件背景根据状态做出改变。

    利用绘图API自定义视图

    覆盖draw函数:

    @Override
    	public void draw(Canvas canvas) {
    		super.draw(canvas);
    		canvas.drawRect(0,0,500,500,paint);
    
    	}
    private void initproperties() {
    paint = new Paint();
    paint.setColor(Color.RED);
    }

      

  • 相关阅读:
    C#调用VC++.net托管库程序集DLL
    SQL Server 2008 评估期已过期解决办法
    TFS2010安装(转)
    将dll添加到GAC(Global Assembly Cache)中
    LINQ to SQL with NOLOCK
    SQL Server 2008创建定期自动备份任务(转)
    问题解决记录(一)
    控制台读入
    数据库
    a标签的onclick与href的执行顺序
  • 原文地址:https://www.cnblogs.com/dracohan/p/5990190.html
Copyright © 2020-2023  润新知