一、Drawable资源通常存放在/res/drawable目录下面。
二、图片资源
图片资源是最简单的Drawable资源.只要把*.png,*.jpg,*.gif 等格式的图片放入目录下面就可以使用,Android SDK会在编译时自动加载图片,并在R资源清单中生成索引。
在java代码中使用R.drawable.file_name
三、StateListDrawable资源用于组织多个Drawable对象,StateListDrawable对象所显示的会根据目标组件的状态来改变。
定义StateListDrawable对象时的xml文件的根元素是<selecto......../>,该元素包含多个<item..../>元素,该元素可指定如下的属性,
android:color或者android:drawable:指定颜色或者Drawable对象
Android:state_Xxx:指定特定的一个状态
其中有如下的状态
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/p5rj" /> //按下时的背景图片
<item android:drawable="@drawable/p6txkt"></item> //原本的背景图片
</selector>
没按之前
按下之后
四、LayerDrawable资源
五、ShapDrawable资源
其根元素为<shap....../>
可指定如下的属性:android:shape=["rectange"|"oval"|"line"|"ring"]指定那种几何图形
可定义四个角的幅度,定义渐变填充,定义内边距,定义大小,定义单种颜色填充,定义几何绘制边框
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"> //按下
<shape>
<gradient android:startColor="@color/colorButtonstart" android:endColor="@color/colorButtonend" android:type="radial" android:gradientRadius="90"/>
<corners android:radius="10dp"/>
</shape>
</item>
<item> //正常
<shape>
<gradient android:startColor="@color/colorButtonstart0" android:endColor="@color/colorButtonend0" android:type="linear"/>
<corners android:radius="10dp"/>
</shape>
</item>
</selector>
六、ClipDrawable资源
可指定如下的三个属性:
android:drawable:指定截取源
android:clipOrientation:指定截取的方向,可水平,可垂直
android:gravity:指定截取时的对齐方式
setLevel(int level)方法可以设置截取的区域大小
徐徐展开的风景(实例)
(1)xml
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/p3"
android:clipOrientation="horizontal"
android:gravity="left">
</clip>
(2)java代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView=findViewById(R.id.image_1);
final ClipDrawable drawable=(ClipDrawable)imageView.getDrawable();
final Handler handler=new Handler(){
public void handleMessage(Message msg){
if(msg.what==0x1233){
drawable.setLevel(drawable.getLevel()+200);
}
}
};
final Timer timer=new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
Message message=new Message();
message.what=0x1233;
handler.sendMessage(message);
if(drawable.getLevel()>=10000){
timer.cancel();
}
}
},0,50);
}
}
七、AnimationDrawable
可指定如下的四个元素
alpha:设置透明度
scale:设置缩放
translate:设置图片进行位移
rotate设置进行旋转
实例动画:
(1)xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:duration="5000">
<scale
android:fromXScale="1.0"
android:toXScale="1.4"
android:fromYScale="1.0"
android:toYScale="0.6"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="true"
android:duration="2000"/>
<translate
android:fromXDelta="10"
android:toXDelta="130"
android:fromYDelta="30"
android:toYDelta="-80"
android:duration="2000"/>
</set>
(2)java代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView2=findViewById(R.id.image_2);
final Animation animation= AnimationUtils.loadAnimation(this,R.anim.my_anim);
animation.setFillAfter(true); //动画结束保留图片变换结果
imageView2.startAnimation(animation); //开始动画
}
}
八、属性动画
九、xml文件的资源
实例解析xml文件
(1)xml
<?xml version="1.0" encoding="utf-8"?>
<books>
<book price="109" 出版社="西华大学">疯狂的java</book>
<book price="108" 出版社="成都理工">c++编程</book>
</books>
(2)解析的java代码
public class PropertyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.property_activity);
final TextView boos_d=findViewById(R.id.book_d);
Button jx=findViewById(R.id.jx);
jx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
XmlResourceParser xrp=getResources().getXml(R.xml.books);
try{
StringBuilder sb=new StringBuilder();
while (xrp.getEventType()!=XmlResourceParser.END_DOCUMENT){
if(xrp.getEventType()==XmlResourceParser.START_TAG){
String tagName=xrp.getName();
if(tagName.equals("book")){
//用名称来获取属性值
String bookprice=xrp.getAttributeValue(null,"price");
sb.append("价格:"+bookprice+" ");
//根据属性的索引获取属性值
String bookcbs=xrp.getAttributeValue(1);
sb.append("出版社:"+bookcbs+" ");
String bookName=xrp.nextText();
sb.append("书名:"+bookName);
}
sb.append("\n");
//一个book解析完成
}
xrp.next();
}
boos_d.setText(sb.toString());
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}