Android 自定义属性(Attribute)详解
来源:互联网 发布:vfp九九乘法表编程 编辑:程序博客网 时间:2024/06/05 14:30
- 前言
- 定义属性Attribute资源
- 实例
- 定义XML属性资源
- 自定义ImageView类
- 使用
- MainActivity代码
前言
Android本身给我们提供了很多的属性,像我们经常要用到的:android:layout_width="match_parent"、android:layout_height="match_parent"
等等……
但是有时候,我们需要用到自定义的View,自定义View可以在代码中使用,也可以在XML界面布局中使用,那么我们就可以给我们的自定义View增加只属于它自己的属性,通过这些属性可以使我们更好的控制View组件的外观以及行为。这一篇主要讲解下自定义属性的运用。
定义属性(Attribute)资源
属性资源文件放在/res/values目录下,文件名字是:attrs.xml,由于IDE创建时没有帮我们自动生成这个文件,所以我们需要自己创建attrs.xml文件。attrs.xml文件的根元素是<resources../>
元素,该元素下包含了如下两个子元素:
* attr子元素:定义一个属性。
* declare-styleable子元素:定义一个styleable对象,每个对象都是一组attr属性的集合。
下面以一个自定义默认带动画的图片来演示下自定义属性的运用。
实例
定义XML属性资源
<?xml version="1.0" encoding="utf-8"?><resources> <attr name="duration"/> <declare-styleable name="AlphaImageView"> <attr name="duration"/> </declare-styleable></resources>
上面的属性资源文件中,定义了一个duration的属性,定义了这个属性之后,这个属性到底在哪里使用就不归属性资源文件管了,属性资源文件中的属性到底可以发挥什么作用,完全由自定义View中的代码实现。
注意:在属性资源文件中定义
<declare-styleable.../>
元素时,可以在其内部直接使用<attr.../>
定义属性,使用
自定义ImageView类
/** * 作者:周游 * 时间:2016/05/15 13:59 * 描述:默认带透明动画的ImageView */public class AlphaImageView extends ImageView { // 图片透明度每次改变的大小 private int alphaDelta = 0; // 记录图片当前的透明度 private int curAlpha = 0; // 每隔多少毫秒透明度改变一次 private final int SPEED = 300; Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { curAlpha += alphaDelta; if(curAlpha >= 255) curAlpha = 255; AlphaImageView.this.setImageAlpha(curAlpha); } }; public AlphaImageView(Context context, AttributeSet attrs) { super(context, attrs); // 获取attrs.xml资源文件中定义的duration属性 TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AlphaImageView); int duration = typedArray.getInt(R.styleable.AlphaImageView_duration, 0); // 计算每次改变的大小 alphaDelta = 255 * SPEED / duration; } @Override protected void onDraw(Canvas canvas) { this.setImageAlpha(curAlpha); super.onDraw(canvas); final Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { if(curAlpha >= 255){ timer.cancel(); }else{ handler.sendEmptyMessage(0); } } }, 0, SPEED); }}
上面的代码中,我们获取了定义的duration属性,并通过该属性计算图片透明度的变化幅度。
使用
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:crazyit="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.airsaid.attributedemo.MainActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="show" android:text="显示图片" /> <com.airsaid.attributedemo.AlphaImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" crazyit:duration="60000" /></LinearLayout>
注意:使用自定义View的时候,注意加入我们自己的命名空间:
xmlns:crazyit="http://schemas.android.com/apk/res-auto"
其中crazyit我们可以随意起。
MainActivity代码
public class MainActivity extends AppCompatActivity { private ImageView mImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mImageView = (ImageView) findViewById(R.id.imageView); } public void show(View v){ mImageView.setImageResource(R.mipmap.ic_launcher); }}
运行结果:
当我们点击按钮时,图片显示时会有一个透明动画效果。代码很简单并贴的很全,就不上传了。
- Android 自定义属性(Attribute)详解
- Android 自定义属性(Attribute)详解
- android 自定义属性(attribute)
- Android自定义属性attribute
- android 属性(Attribute)资源
- 一个自定义属性(Attribute)的Demo
- iOS 自定义属性 attribute
- Android 自定义属性详解
- android自定义属性详解
- Android自定义属性详解
- Android 自定义属性详解
- Android自定义属性详解
- Android 自定义属性详解
- 【android 开发知识积累】——属性(Attribute)资源的使用和自定义View组件
- Android attrs文件(自定义)属性详解
- Android控件自定义属性(declare-styleable属性详解)
- Android自定义属性,format详解
- Android自定义属性,format详解
- jquery-uploadfile的使用(多文件异步上传)
- 敏捷开发流程
- Sql四种语言
- iOS开发系列--无限循环的图片浏览器
- jQuery与AJAX----jQuery中ajax接口
- Android 自定义属性(Attribute)详解
- 严重: Exception sending context initialized event to listener instance of class org.springframework.we
- DE2-115创建Web Server详细步骤(Quartus 13.1)
- Spring 关键点
- hpp.h与.h的区别
- 断言的学习
- poj 2187 Beauty Contest (凸包 Graham)
- poj之旅——3262
- 这个人准备学的↓↓↓↓↓