由于在开发过程,为了实现未曾了解的某种效果与特定功能,而求助于网上优秀的开源项目,在使用过程中发现引用开源的Library Project(库项目),的确可以解决很多问题,而且也给出了一种思路,好的软件公司也需要有自己的Library Project(库项目),这样不必要进行重复开发工作,这只是自己的想法。下面将自己的心得或体会记录如下,以下是自己的编写风格。

应用场景:

在项目的开发过程中,经常会使用公司内部的公共库或使用优秀的开源项目库,以求达到快速开发、代码复用的效果。所开发的项目中要集成其他项目由于集成项目庞大,不想机械的复制,就想将集成的项目做成项目库。基于这样的需求,引用Library Project(库项目),成为了迫切的需要,这样做以后集成项目升级、扩展也都方便与快捷。为此,我们不得不去了解Android Library Project(库项目)创建与引用操作。 【转载使用,请注明出处:http://blog.csdn.net/mahoking/article/details/36405219】

使用方式:

第一步:创建项目MyLib,【Next】。

第二步:红色部分取消勾选,不勾选 [Create custom launcher icon] 和[Create activity], 勾选[Make this project as a library]。

第三步:先建包名,添加MyImageView.java 文件。 【MyImageView.java引用他人的代码,在此表示感谢。】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
package com.example.lib;
 
import android.content.Context;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ImageView;
 
public class MyImageView extends ImageView {
 
    private static final String TAG = MyImageView;
    private static final int SCALE_REDUCE_INIT = 0;
    private static final int SCALING = 1;
    private static final int SCALE_ADD_INIT = 6;
 
    /** * 控件的宽*/
    private int mWidth;
    /*** 控件的高*/
    private int mHeight;
    /*** 控件的宽1/2*/
    private int mCenterWidth;
    /*** 控件的高 1/2*/
    private int mCenterHeight;
    /*** 设置一个缩放的常量*/
    private float mMinScale = 0.85f;
    /*** 缩放是否结束*/
    private boolean isFinish = true;
 
    public MyImageView(Context context) {
        this(context, null);
    }
 
    public MyImageView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
 
    public MyImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
 
    /**
     * 必要的初始化
     */
    @Override
    protected void onLayout(boolean changed, int left, int top, int right,
            int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        if (changed) {
            mWidth = getWidth() - getPaddingLeft() - getPaddingRight();
            mHeight = getHeight() - getPaddingTop() - getPaddingBottom();
 
            mCenterWidth = mWidth / 2;
            mCenterHeight = mHeight / 2;
 
            Drawable drawable = getDrawable();
            BitmapDrawable bd = (BitmapDrawable) drawable;
            bd.setAntiAlias(true);
        }
    }
 
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            float X = event.getX();
            float Y = event.getY();
            mScaleHandler.sendEmptyMessage(SCALE_REDUCE_INIT);
            break;
        case MotionEvent.ACTION_UP:
            mScaleHandler.sendEmptyMessage(SCALE_ADD_INIT);
            break;
        }
        return true;
    }
 
    /**
     * 控制缩放的Handler
     */
    private Handler mScaleHandler = new Handler() {
        private Matrix matrix = new Matrix();
        private int count = 0;
        private float s;
        /**
         * 是否已经调用了点击事件
         */
        private boolean isClicked;
 
        public void handleMessage(android.os.Message msg) {
            matrix.set(getImageMatrix());
            switch (msg.what) {
            case SCALE_REDUCE_INIT:
                if (!isFinish) {
                    mScaleHandler.sendEmptyMessage(SCALE_REDUCE_INIT);
                } else {
                    isFinish = false;
                    count = 0;
                    s = (float) Math.sqrt(Math.sqrt(mMinScale));
                    beginScale(matrix, s);
                    mScaleHandler.sendEmptyMessage(SCALING);
                }
                break;
            case SCALING:
                beginScale(matrix, s);
                if (count < 4) {
                    mScaleHandler.sendEmptyMessage(SCALING);
                } else {
                    isFinish = true;
                    if (MyImageView.this.mOnViewClickListener != null
                            && !isClicked) {
                        isClicked = true;
                        MyImageView.this.mOnViewClickListener
                                .onViewClick(MyImageView.this);
                    } else {
                        isClicked = false;
                    }
                }
                count++;
 
                break;
            case SCALE_ADD_INIT:
                if (!isFinish) {
                    mScaleHandler.sendEmptyMessage(SCALE_ADD_INIT);
                } else {
                    isFinish = false;
                    count = 0;
                    s = (float) Math.sqrt(Math.sqrt(1.0f / mMinScale));
                    beginScale(matrix, s);
                    mScaleHandler.sendEmptyMessage(SCALING);
                }
                break;
            }
        }
    };
 
    protected void sleep(int i) {
        try {
            Thread.sleep(i);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
 
    /**
     * 缩放
     *
     * @param matrix
     * @param scale
     */
    private synchronized void beginScale(Matrix matrix, float scale) {
        matrix.postScale(scale, scale, mCenterWidth, mCenterHeight);
        setImageMatrix(matrix);
    }
 
    /**
     * 回调接口
     */
    private OnViewClickListener mOnViewClickListener;
 
    public void setOnClickIntent(OnViewClickListener onViewClickListener) {
        this.mOnViewClickListener = onViewClickListener;
    }
 
    public interface OnViewClickListener {
        void onViewClick(MyImageView view);
    }
 
}

第四步:创建另一个项目MyProj ,勾选 [Create custom launcher icon] 和[Create activity], 不勾选[Make this project as a library]。

第五步:引用MyLib项目。

第六步:编写activtiy_main.xml与对应的Activity。
【activtiy_main.xml】

1
2
3
4
<relativelayout android:gravity="center" android:layout_height="match_parent" android:layout_width="match_parent" tools:context=".MainActivity" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
     
    <com.example.lib.myimageview android:id="@+id/myImageView/" android:layout_height="wrap_content" android:layout_width="wrap_content" android:scaletype="matrix" android:src="@drawable/chat_004">
</com.example.lib.myimageview></relativelayout>

【MainActivtiy.java】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.example.myproj;
 
import com.example.lib.MyImageView;
import com.example.lib.MyImageView.OnViewClickListener;
 
import android.os.Bundle;
import android.app.Activity;
import android.widget.Toast;
 
public class MainActivity extends Activity {
 
    private MyImageView imageView;
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViews();
    }
 
    private void initViews() {
        imageView = (MyImageView) findViewById(R.id.myImageView);
        imageView.setOnClickIntent(new OnViewClickListener() {
             
            @Override
            public void onViewClick(MyImageView view) {
                Toast.makeText(getApplicationContext(), 你点触了这个可爱的表情!, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

第七步:运行项目MyProj,出现如下效果。

Android 创建Library Project(库项目)与引用操作的更多相关文章

  1. As环境下添加android support library依赖库

    2015年的google大会上,google发布了新的Android Support Design库的新组件之一,以此来全面支持Material Design 设计风格的UI效果,为了可以使用这些新颖 ...

  2. Android Studio创建库项目及引用

    Android Studio创建库项目其实创建的是在主项目下创建Module模块,这个Module模块创建的时候选择库项目模式. 为什么要这样处理呢?因为在Android Studio中一个WorkS ...

  3. 使用Android Studio导入第三方库项目

    在使用Android Studio开发时,用到了第三方库SlidingMenu(现在已经不推荐使用了),尽管如此,但具体怎么导入第三方库还是需要知道的,在查阅各种资料后,知道了一种比较容易可行的方法 ...

  4. Android创建library工程

    本文着重介绍如何创建Android library,并且在工程中使用此library提供的资源,具体步骤如下:1. 创建一个Android工程,命名为sourceProj2. 右键--properti ...

  5. android 引入一个布局库后该有的操作

    背景 引入一个布局库:com.zhy:percent-support-extends 然后sync now 成功了,也就是同步成功了. 然而开始使用的时候报告了: The following clas ...

  6. Android中库项目、jar包等的使用方法

    在软件开发过程中,程序代码的复用,是非常重要的概念.我们总是需要使用一些现有的模块.包.框架,或开发自己的模块.包.框架,来实现对程序代码的复用.比如在JavaWeb编程过程中,经常使用的Struts ...

  7. [AIR] NativeExtension在IOS下的开发实例 --- Flex库项目的创建(二)

    来源:http://bbs.9ria.com/thread-102038-1-1.html 上一章,我已经介绍了如果创建IOS库文件,并定义了两个方法ShowIconBadageNumber和Init ...

  8. 开箱即用 yyg-cli(脚手架工具):快速创建 vue3 组件库和vue3 全家桶项目

    1 yyg-cli 是什么 yyg-cli 是优雅哥开发的快速创建 vue3 项目的脚手架.在 npm 上发布了两个月,11月1日进行了大升级,发布 1.1.0 版本:支持创建 vue3 全家桶项目和 ...

  9. 使用 Flex 库项目---打包swc

    来源:http://help.adobe.com/zh_CN/flashbuilder/using/WSe4e4b720da9dedb5-1a92eab212e75b9d8b2-7ffe.html   ...

随机推荐

  1. mac版MyEclipse的安装及创建web项目

    这两天快被MyEclipse整死了,因为电脑是mac系统的,安装MyEclipse mac破解版时一直是不成功,弄了一天多才行,接着创建web项目HttpServlet在Tomcat发布时总是出现40 ...

  2. Shortest Path

    Shortest Path Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  3. [poj解题]1017

    Packets Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 41014   Accepted: 13776 Descrip ...

  4. Tomcat(.jsp)

    定义: Tomcat服务器是一个免费的开放源代码的Web应用服务器.Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由 ...

  5. andorid之摄像头驱动流程--MTK平台

    原文地址:andorid之摄像头驱动流程--MTK平台 作者:守候心田 camera成像原理: 景物通过镜头生产光学图像投射到sensor表面上,然后转为模拟电信号,经过数模变成数字图像信号,在经过D ...

  6. java类集: collection, list , set, map

    都在java.util包里.容器:装各种对象. Collections类 : 集合工具类, 提供了一些静态方法, 方法里的参数是List等. Colection接口,子接口主要有:   Set: 内容 ...

  7. HTML 基础语言

      打开DREAMWEAVER,新建HTML.. body的属性: bgcolor                页面背景色 background            背景壁纸.图片 text    ...

  8. mysql的 charset、collation、prefix了解

    charset,即字符集. collation,用于指定数据集如何排序,以及字符串的比对规则,即排序规则. prefix,即数据库里表使用的前缀. /************************* ...

  9. 在线文档转换API word,excel,ppt等在线文件转pdf、png

    在线文档转换API提供word,excel,ppt等在线文件转pdf.png等,文档:https://www.juhe.cn/docs/api/id/259 接口地址:http://v.juhe.cn ...

  10. 完美分割字符串,实现字符串的splict功能

    class Str:Client_C { string val; string[] str = new string[100]; public void StrT1() { //1.正常情况 //2. ...