获得LayoutInflater的两种方式:
1、通过Activity的getLayoutInflater方法:
LayoutInflater inflater = getLayoutInflater ();
2、通过获得系统服务:
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
参考地址:http://developer.android.com/reference/android/view/LayoutInflater.html
JAXB 的全名是Java Architecture for XML Binding。JAXB的特点就是将你用DTD定义好的XML文档映射为Java对象,提供简单、快速的数据操作方式。要访问XML中的元素、属性只要通过相应对象上的一系列getter和 setter方法。你还可以通过marshal方法将对象的数据写进XML文件,通过unmarshal方法将XML文件的数据读入对象,通过validate方法验证XML文件是否符合DTD的约束。JAXB的缺点就在于只能访问特定的(也就是你用DTD定义的)XML文档。
先看例子吧:
Customer.java
import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Customer { String name; int age; int id; @XmlElement public String getName() { return name; } public void setName(String name) { this.name = name; } @XmlElement public int getAge() { return age; } public void setAge(int age) { this.age = age; } @XmlAttribute public int getId() { return id; } public void setId(int id) { this.id = id; } @Override public String toString() { return "Customer[" + getName() + "," + getId() + "," + getAge() + "]"; } }
import java.io.File; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; public class JAXBExample { public static void main(String[] args) { Customer customer = new Customer(); customer.setId(100); customer.setName("mkyong"); customer.setAge(29); try { File file = new File("C:\\file.xml"); JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class); //JAVA to XML Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); //按标签划分行 jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.marshal(customer, file); jaxbMarshaller.marshal(customer, System.out); //打印输出 //XML TO JAVA Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); Customer mycustomer = (Customer) jaxbUnmarshaller.unmarshal(file); System.out.println(mycustomer); } catch (JAXBException e) { e.printStackTrace(); } } }
控制台打印输出如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="100">
<age>29</age>
<name>mkyong</name>
</customer>
Customer[mkyong,100,29]
关于注解:
@XmlRootElement 将一个Java类映射为一段XML的根节点
参数:name 定义这个根节点的名称
namespace 定义这个根节点命名空间
@XmlAccessorType 定义映射这个类中的何种类型需要映射到XML。可接收四个参数,分别是:
XmlAccessType.FIELD:映射这个类中的所有字段到XML
XmlAccessType.PROPERTY:映射这个类中的属性(get/set方法)到XML
XmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)
XmlAccessType.NONE:不映射
@XmlElement 指定一个字段或get/set方法映射到XML的节点。如,当一个类的XmlAccessorType 被标注为PROPERTY时,在某一个没有get/set方法的字段上标注此注解,即可将该字段映射到XML。
参数:defaultValue 指定节点默认值
name 指定节点名称
namespace 指定节点命名空间
required 是否必须(默认为false)
nillable 该字段是否包含 nillable="true" 属性(默认为false)
type 定义该字段或属性的关联类型
@XmlAttribute 指定一个字段或get/set方法映射到XML的属性。
参数:name 指定属性名称
namespace 指定属性命名空间
required 是否必须(默认为false)
@XmlTransient 定义某一字段或属性不需要被映射为XML。如,当一个类的XmlAccessorType 被标注为PROPERTY时,在某一get/set方法的字段上标注此注解,那么该属性则不会被映射。
@XmlType 定义映射的一些相关规则
参数:propOrder 指定映射XML时的节点顺序
factoryClass 指定UnMarshal时生成映射类实例所需的工厂类,默认为这个类本身
factoryMethod 指定工厂类的工厂方法
name 定义XML Schema中type的名称
namespace 指定Schema中的命名空间
@XmlElementWrapper 为数组元素或集合元素定义一个父节点。如,类中有一元素为List items,若不加此注解,该元素将被映射为
<items>...</items>
<items>...</items>
这种形式,此注解可将这个元素进行包装,如:
@XmlElementWrapper(name="items")
@XmlElement(name="item")
public List items;
将会生成这样的XML样式:
<items>
<item>...</item>
<item>...</item>
</items>
@XmlJavaTypeAdapter 自定义某一字段或属性映射到XML的适配器。如,类中包含一个接口,我们可以定义一个适配器(继承自 javax.xml.bind.annotation.adapters.XmlAdapter类),指定这个接口如何映射到XML。
@XmlSchema 配置整个包的namespace,这个注解需放在package-info.java文件中。
测试:
将上面的代码做少许更改,如下:
@XmlElement(name = "myname") public String getName() { return name; } @XmlAttribute(name = "theID") public int getId() { return id; }
结果打印输出为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer theID="100">
<age>29</age>
<myname>mkyong</myname>
</customer>
Customer[mkyong,100,29]
发现改变了属性及节点的标签名称。
总结:
注解可以放在成员变量声明上面,也可以放在set/get函数上面。若是要指定别名的时候,不能放在变量声明上面,会报错。
参考:jaxb注解
[UIView beginAnimations:nil context:nil];
[UIView setAnimationRepeatAutoreverses:YES];//动画是否返回
[UIView setAnimationDuration:0.3];
button.alpha =0;
[UIView commitAnimations];
CATransition的type属性
1.#define定义的常量
kCATransitionFade 交叉淡化过渡
kCATransitionMoveIn 新视图移到旧视图上面
kCATransitionPush 新视图把旧视图推出去
kCATransitionReveal 将旧视图移开,显示下面的新视图
2.用字符串表示
pageCurl 向上翻一页
pageUnCurl 向下翻一页
rippleEffect 滴水效果
suckEffect 收缩效果,如一块布被抽走
cube 立方体效果
oglFlip 上下翻转效果
- (void)MyCAnimation1 {
CATransition *animation = [CATransition animation];
//动画时间
animation.duration = 1.0f;
//display mode, slow at beginning and end
animation.timingFunction = UIViewAnimationCurveEaseInOut;
//过渡效果
animation.type = kCATransitionMoveIn;
//过渡方向
animation.subtype = kCATransitionFromTop;
//添加动画
[imageView.layer addAnimation:animation forKey:nil];
}
- (void)MyCAnimation2 {
CATransition *animation = [CATransition animation];
//动画时间
animation.duration = 1.0f;
//display mode, slow at beginning and end
animation.timingFunction = UIViewAnimationCurveEaseInOut;
//在动画执行完时是否被移除
animation.removedOnCompletion = NO;
//过渡效果
animation.type = @"pageCurl";
//过渡方向
animation.subtype = kCATransitionFromRight;
//暂时不知,感觉与Progress一起用的,如果不加,Progress好像没有效果
animation.fillMode = kCAFillModeForwards;
//动画停止(在整体动画的百分比).
animation.endProgress = 0.7;
[imageView.layer addAnimation:animation forKey:nil];
}
- (void)MyCAnimation3 {
CATransition *animation = [CATransition animation];
//动画时间
animation.duration = 1.0f;
//display mode, slow at beginning and end
animation.timingFunction = UIViewAnimationCurveEaseInOut;
//过渡效果
animation.type = @"pageUnCurl";
//过渡方向
animation.subtype = kCATransitionFromRight;
//暂时不知,感觉与Progress一起用的,如果不加,Progress好像没有效果
animation.fillMode = kCAFillModeBackwards;
//动画开始(在整体动画的百分比).
animation.startProgress = 0.3;
[imageView.layer addAnimation:animation forKey:nil];
}