标签:
昨天发了一个自己写的简单的诸如EditText一个自定义控件,不过貌似反响不太好,这里再推一推,希望大家给予意见和支持:http://blog.csdn.net/ddwhan0123/article/details/50235151
OK,言归正传,上一次添加了一个“个人开发:界面,希望把之后自己写的一些东西都加入里面,作为一个”大型Lib”使用,所以就简单的把内容和界面搭了一下,也大致区分了下栏目,这种展示性的还是以ListView为佳,上下效果图。
就是点进去之后,缓慢的加载这么个效果。
说一下,加这么个效果的好处:
1.在加载的过程中可以做一些异步的事情,降低系统的负荷
2.让整个页面的出现显得更柔和
实现:
<ListView
android:id="@+id/codeListView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:choiceMode="singleChoice"
android:layoutAnimation="@anim/code_item_anim" />
只需要在ListView里添加android:layoutAnimation="@anim/code_item_anim"
指向一个animation就行了,当然你也可以在java代码里加。
一个作为动画实现,一个座位每一次的延迟加载。
这里贴一下所用到的素材文件:
code_item_anim
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/list_anim"
android:animationOrder="normal"
android:delay="0.1" />
list_anim.xml
<?xml version="1.0" encoding= "utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate android:fromXDelta="-100%"
android:fromYDelta="0"
android:toXDelta="0"
android:toYDelta="0"
android:duration="2550"
android:interpolator="@android:anim/anticipate_overshoot_interpolator" />
</set>
Activity和Adapter的代码在源码里找把,文章最后会贴的。
再说下Activity的”抽象化“
平时,我们要用一些通用的方法怎么办?
1.写工具类,调用(这个我感觉是最多的了)。
2.写一个公有父类,然后用父类的Protected的方法(Dialog之类的用的比较多)。
3.其他。
好,那么我来贴一下所谓的”抽象化“。
public abstract class Son extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayout());
bindID();
init();
setOnclick();
logic();
}
public abstract int getLayout();
public abstract void bindID();
public abstract void init();
public abstract void setOnclick();
public abstract void logic();
}
有一个类叫Son继承于Activity,有一系列的抽象方法(当然,其实这些抽象方法是不是抽象的不要紧,但是一定是抽象类)
然后,又有一个类继承了Son
//像这样只是继承了
public class CodeActivity extends Son
那么集成一个抽象类,就要实现他的抽象方法,像这样
@Override
public int getLayout() {
LogUtils.d("--->CodeActivity getLayout");
return R.layout.activity_code;
}
@Override
public void init() {
}
@Override
public void bindID() {
}
@Override
public void setOnclick() {
}
@Override
public void logic() {
LogUtils.d("--->CodeActivity logic");
}
代码就这些,我们来说下为什么这么做。
我们繁杂的Activity的onCreate方法其实是我们要Code最多的地方,从findviewbyid到setOnclickListener,然后还可能有一些其他业务逻辑的操作。
但是我这么一抽象,就间接的把onCreate方法进行了分层,每一个方法很清楚的告诉别人(读你代码的人),你这是关于什么的,让代码的可读性更强,逻辑更清晰。
当然,已有很多小伙伴是在Activity内部写了一个诸如private void init();
然后在onCreate方法中init();一下,其实也行,但是有可能你每一个Activity都得那么做,但是现在,我们只需要extends Son就可以完成这些操作,何乐而不为呢?
这里也只是举了一个例子,你也可以声明Interface来做,也行效果相同。
像这样:http://blog.csdn.net/a_running_wolf/article/details/49359923
下面理一下基础:
抽象类
抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板
基类
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
// abstract method
abstract void service(ServletRequest req, ServletResponse res);
void init() {
// Its implementation
}
// other method related to Servlet
}
实现
public class HttpServlet extends GenericServlet {
void service(ServletRequest req, ServletResponse res) {
// implementation
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
// Implementation
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
// Implementation
}
// some other methods related to HttpServlet
}
接口
接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。
接口:
public interface Externalizable extends Serializable {
void writeExternal(ObjectOutput out) throws IOException;
void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
}
实现:
public class Employee implements Externalizable {
int employeeId;
String employeeName;
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
employeeId = in.readInt();
employeeName = (String) in.readObject();
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeInt(employeeId);
out.writeObject(employeeName);
}
}
源码地址:https://github.com/ddwhan0123/SoyiGit/tree/master/Soyi
整合大量开源库项目(六)ListView动画,Activity"抽象化",顺便提一提”抽象类“And"接口"
标签:
原文地址:http://blog.csdn.net/ddwhan0123/article/details/50251835