转载请注明出处:
http://blog.csdn.net/iwanghang/article/details/53783417
觉得博文有用,请点赞,请评论,请关注,谢谢!~
老规矩,先上效果图,看个效果,如果符合你的项目或者确定你要了解的内容,再往下看吧:
MainActivity.java:
转载请注明出处: http://blog.csdn.net/iwanghang/article/details/53783417
觉得博文有用,请点赞,请评论,请关注,谢谢!~
觉得博文有用,请点赞,请评论,请关注,谢谢!~
老规矩,先上效果图,看个效果,如果符合你的项目或者确定你要了解的内容,再往下看吧:
MainActivity.java:
package com.iwanghang.autoattribute;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
MyAttributeView.java:
package com.iwanghang.autoattribute;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;
public class MyAttributeView extends View {
private int age;
private String name;
private int text_size;
private Bitmap bg;
private Bitmap bg2;
public MyAttributeView(Context context, AttributeSet attrs) {
super(context, attrs);
// 获取属性三种方式
// 1、用命名空间获取
String my_name = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto","my_name");
String my_age = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto","my_age");
String my_bg = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto","my_bg");
System.out.println("ceshi 用命名空间获取 = my_name = "+ my_name + ", my_age = "+ my_age + ", my_bg = "+ my_bg);
// 2、遍历属性集合
for (int i = 0; i <attrs.getAttributeCount() ; i++) {
System.out.println("ceshi 遍历属性集合 = " + attrs.getAttributeName(i) + " | " + attrs.getAttributeValue(i));
}
// 3、使用系统工具,获取属性
TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.MyAttributeView);
for (int i = 0; i <typedArray.getIndexCount() ; i++) {
int index = typedArray.getIndex(i);
switch (index){
case R.styleable.MyAttributeView_my_age:
age = typedArray.getInt(index,0);
break;
case R.styleable.MyAttributeView_my_name:
name = typedArray.getString(index);
System.out.println("ceshi2 name = " + name);
break;
case R.styleable.MyAttributeView_text_size:
text_size = typedArray.getDimensionPixelSize(index, 0);
break;
case R.styleable.MyAttributeView_my_bg:
Drawable drawable = typedArray.getDrawable(index);
BitmapDrawable drawable1 = (BitmapDrawable) drawable;
bg = drawable1.getBitmap();
break;
case R.styleable.MyAttributeView_my_bg_2:
Drawable drawable3 = typedArray.getDrawable(index);
BitmapDrawable drawable4 = (BitmapDrawable) drawable3;
bg2 = drawable4.getBitmap();
break;
}
}
// 记得回收
typedArray.recycle();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
if (text_size != 0) {
// Layout中如果设置字体大小,则设置为Layout中字体大小
paint.setTextSize(text_size);
}else {
// Layout中如果没有设置字体大小,则20sp
paint.setTextSize(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, getResources().getDisplayMetrics()));
}
canvas.drawText(name,50,50,paint);
canvas.drawText(String.valueOf(age),50,100,paint);
//canvas.drawBitmap(bg,50,150,paint);
canvas.drawBitmap(bg,null,new Rect(0,0,650,500),null);
canvas.drawBitmap(bg2,null,new Rect(100,450,550,750),null);
}
}
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:iwanghang="http://schemas.android.com/apk/res-auto"
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.iwanghang.autoattribute.MainActivity">
<com.iwanghang.autoattribute.MyAttributeView
iwanghang:my_age="100"
iwanghang:my_name="_iwanghang_"
iwanghang:text_size="30sp"
iwanghang:my_bg="@drawable/christmas"
iwanghang:my_bg_2="@drawable/c2"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!--如果删除这句,默认字体大小为20sp-->
<!--iwanghang:text_size="30sp"-->
</RelativeLayout>
attrs.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyAttributeView">
<attr name="my_age" format="integer"/>
<attr name="my_name" format="string" />
<attr name="text_size" format="dimension" />
<attr name="my_bg" format="reference|color"/>
<attr name="my_bg_2" format="reference|color"/>
</declare-styleable>
</resources>
转载请注明出处: http://blog.csdn.net/iwanghang/article/details/53783417
欢迎移动开发爱好者交流
沈阳或周边城市公司有意开发Android,请与我联系
联系方式
微信:iwanghang
QQ:413711276
邮箱:iwanghang@qq.com
沈阳或周边城市公司有意开发Android,请与我联系
联系方式
微信:iwanghang
QQ:413711276
邮箱:iwanghang@qq.com
觉得博文有用,请点赞,请评论,请关注,谢谢!~