整合大量开源库项目(六)ListView动画,Activity"抽象化",顺便提一提”抽象类“And"接口"

简介:

转载请注明出处:王亟亟的大牛之路

昨天发了一个自己写的简单的诸如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

这里写图片描述

记得点个赞哦,谢谢支持!

目录
相关文章
Vue2.js:v-click-outside自定义指令和vue-click-outside监听鼠标点击元素外部区域事件
Vue2.js:v-click-outside自定义指令和vue-click-outside监听鼠标点击元素外部区域事件
888 0
Vue2.js:v-click-outside自定义指令和vue-click-outside监听鼠标点击元素外部区域事件
|
9月前
|
弹性计算 运维 监控
阿里云云服务诊断工具评测-轻松实现云资源健康监控与故障排查
阿里云云服务诊断工具评测:作为一名开发工程师,我体验了其健康状态与诊断功能。健康状态功能可实时监控ECS实例运行状况,帮助快速发现异常;诊断功能则自动分析并提供解决方案,显著提升故障排查效率。通过这些功能,我的工作效率提升了约30%-40%。建议进一步增强智能诊断和优化界面显示,使工具更加强大易用。推荐给所有运维人员和开发工程师使用。
215 22
|
10月前
|
SQL 安全 Serverless
活动实践 | 基于EMR StarRocks实现游戏玩家画像和行为分析
基于阿里云EMR Serverless StarRocks,利用其物化视图和DLF读写Paimon等能力,构建游戏玩家画像和行为分析平台。通过收集、处理玩家行为日志,最终以报表形式展示分析结果,帮助业务人员决策。
|
11月前
|
机器学习/深度学习 监控 算法
基于深度学习的图像识别技术及应用
基于深度学习的图像识别技术及应用
577 0
|
Linux Windows
端口占用的解决方法
本文介绍了在Windows和Linux系统中解决端口占用问题的方法,包括使用`netstat`命令查看端口占用情况、`tasklist`命令查找对应进程,以及使用`taskkill`命令终止进程,在Linux系统中则使用`netstat`或`lsof`命令查找占用端口的进程,并用`kill`命令结束进程。
|
Java 数据库 开发者
一文带你掌握Spring事务核心:TransactionDefinition详解!
TransactionDefinition是Spring框架中用于定义事务属性的核心接口。在Spring的事务管理中,这个接口扮演着至关重要的角色,它允许开发者定制事务的各种属性,如隔离级别、传播行为、超时时间以及是否只读。
306 2
一文带你掌握Spring事务核心:TransactionDefinition详解!
|
存储 人工智能 安全
云计算与云存储:相互依赖与技术融合
【6月更文挑战第6天】云计算提供强大计算资源,如虚拟服务器和数据分析工具,提高效率和灵活性;云存储则提供可靠、安全、可扩展的存储空间。两者相互依赖并融合,例如通过云计算实现云存储的数据处理和安全管理。融合催生新应用场景,如大数据处理和人工智能训练,但也带来数据安全等挑战。随着技术进步,云计算与云存储的融合将持续推动创新和发展。
355 0
|
供应链 监控 安全
ERP系统中的库存管理与优化
【7月更文挑战第25天】 ERP系统中的库存管理与优化
1350 2
|
安全 数据处理 数据安全/隐私保护
【专栏】IT 知识百科:理解基站工作原理和作用,有助于我们更好地认识通信技术的影响
【4月更文挑战第28天】基站(BTS)是无线通信的关键,包括宏基站、微基站、皮基站和飞基站,它们构建起通信网络,确保稳定服务。基站通过接收、解调、处理和转发信号实现通信。它们提供覆盖、保障通信质量、支持数据传输并推动技术发展。基站建设涉及选址、安装和维护,且其电磁辐射在安全范围内。理解基站工作原理和作用,有助于我们更好地认识通信技术的影响。
1838 0
|
机器人
钉钉的回调事件接入主要涉及到HTTP回调
钉钉的回调事件接入主要涉及到HTTP回调【1月更文挑战第20天】【1月更文挑战第99篇】
469 3