因為在開發過程。為了實現未曾了解的某種效果與特定功能。而求助於網上優秀的開源項目,在使用過程中發現引用開源的Library Project(庫項目),的確能夠解決非常多問題,並且也給出了一種思路。好的軟件公司也須要有自己的Library Project(庫項目),這樣不必要進行反復開發工作,這僅僅是自己的想法。以下將自己的心得或體會記錄例如以下,以下是自己的編寫風格。
【轉載使用。請注明出處:http://blog.csdn.net/mahoking/article/details/36405219】
應用場景:
在項目的開發過程中。常常會使用公司內部的公共庫或使用優秀的開源項目庫。以求達到高速開發、代碼復用的效果。
所開發的項目中要集成其它項目因為集成項目龐大,不想機械的復制。就想將集成的項目做成項目庫。
基於這種需求,引用Library Project(庫項目)。成為了迫切的須要,這樣做以后集成項目升級、擴展也都方便與快捷。為此,我們不得不去了解Android Library Project(庫項目)創建與引用操作。
使用方式:
第一步:創建項目MyLib,【Next】。

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

第三步:先建包名,加入MyImageView.java 文件。 【MyImageView.java引用他人的代碼,在此表示感謝。】
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】
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" tools:context=".MainActivity" > <com.example.lib.MyImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:scaleType="matrix" android:src="@drawable/chat_004" android:id="@+id/myImageView"/> </RelativeLayout>
【MainActivtiy.java】
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,出現例如以下效果。

下載地址
參考資料
1、http://blog.sina.com.cn/s/blog_783ede0301016ip2.html