Android自定义View的方法
2017-04-19 22:29
477 查看
本文大部分直接或间接引用 Mr梵谷 博客中的博文,在此声明并鸣谢
有时候Android传统的页面布局不足以满足我们的需求,常常需要自己定义view,通常继承View,然后重写构造方法以及onDraw等函数,再具体实现自己定义的复杂view。我们知道在给控件赋属性时,通常使用的是android系统自带的属性,比如 android:layout_height="wrap_content",除此之外,我们亦可以自己定义属性,这样在使用的时候我们就可以使用形如 myapp:myTextSize="20sp"的方式了
1》在项目文件res/value下面创建一个attr.xml文件,该文件中包含若干个attr集合,例如:
这里MyView是包名,attr是属性名,format是对应的参数
2》在使用到该自定义view的布局文件中键入如下:
xmlns:myapp=“......................../res-auto”(AS中最后这样加)
而xmlns:tools="http://schemas.android.com/tools"这一行不可以有,否则会出错
这样一来,在我们自己定义的view的属性中,就可以使用自己在attr中定义的属性啦
3》编写一个Java的类来编辑自己定义的View,例如可以在button中加个图形:
调用结束后务必调用recycle()方法,否则这次的设定会对下次的使用造成影响
效果示例:
有时候Android传统的页面布局不足以满足我们的需求,常常需要自己定义view,通常继承View,然后重写构造方法以及onDraw等函数,再具体实现自己定义的复杂view。我们知道在给控件赋属性时,通常使用的是android系统自带的属性,比如 android:layout_height="wrap_content",除此之外,我们亦可以自己定义属性,这样在使用的时候我们就可以使用形如 myapp:myTextSize="20sp"的方式了
1》在项目文件res/value下面创建一个attr.xml文件,该文件中包含若干个attr集合,例如:
这里MyView是包名,attr是属性名,format是对应的参数
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyView"> <attr name="myTextSize" format="dimension"/> <attr name="myColor" format="color"/> </declare-styleable> </resources>
2》在使用到该自定义view的布局文件中键入如下:
xmlns:myapp=“......................../res-auto”(AS中最后这样加)
而xmlns:tools="http://schemas.android.com/tools"这一行不可以有,否则会出错
这样一来,在我们自己定义的view的属性中,就可以使用自己在attr中定义的属性啦
3》编写一个Java的类来编辑自己定义的View,例如可以在button中加个图形:
public class MyButton extends Button{ private Drawable drawable; private float drawableWidth,drawableHeight,buttonHeight; public MyButton(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a=context.obtainStyledAttributes(attrs, R.styleable.my); // get XML文件里设置的图片 drawable=a.getDrawable(R.styleable.my_drawable); // get 图片的size drawableWidth=drawable.getIntrinsicWidth(); drawableHeight=drawable.getIntrinsicHeight(); } @Override protected void onMeasure(int widthMeasureSpec,int heightMeassureSpec) { super.onMeasure(widthMeasureSpec,heightMeassureSpec); buttonHeight= MeasureSpec.getSize(heightMeassureSpec); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); drawable.setBounds(10,10,(int)((buttonHeight-20)/drawableHeight*drawableWidth+10), (int)((buttonHeight-10))); drawable.draw(canvas); } }
调用结束后务必调用recycle()方法,否则这次的设定会对下次的使用造成影响
效果示例:
相关文章推荐
- Android中自定义View的研究(三) -- 获得Bitmap的三种方法
- Android中自定义View的研究(三) -- 获得Bitmap的三种方法
- android在自定义view中自定义属性的方法
- Android中View的绘制过程 onMeasure方法简述 附有自定义View例子
- Android自定义View的实现方法,带你一步步深入了解View(四)
- Android自定义View研究(三) -- 获得Bitmap的三种方法
- Android开发教程:自定义ViewGroup方法总结
- Android自定义View的实现方法,带你一步步深入了解View
- Android中View的绘制过程 onMeasure方法简述 附有自定义View例
- Android自定义View的实现方法,带你一步步深入了解View(四)
- android自定义View设置大小的方法
- Android UI 之居中绘制文本内容的正确方法——实现自定义一个TextView
- 对话框子视图Android自定义Dialog二次调用报错解决方法:The specified child already has a parent. You must call removeView()-java教程
- android自定义View构造方法以及获取自定义属性详解
- Android添加自定义View的方法
- Android学习:自定义ViewGroup方法总结
- Android中自定义View的研究(三) -- 获得Bitmap的三种方法
- Android 自定义view 和 onMeasure方法介绍
- Android 进阶学习:Android自定义View的实现方法,带你一步步深入了解View(四)
- Android自定义View的实现方法,带你一步步深入了解View(四)