由于在开发过程,为了实现未曾了解的某种效果与特定功能,而求助于网上优秀的开源项目,在使用过程中发现引用开源的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,出现如下效果。