Android 创建Library Project(库项目)与引用操作

来源:互联网 发布:2016淘宝店铺夫妻转让 编辑:程序博客网 时间:2024/06/01 19:24

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

Library----在isLibrary的前面勾选复选框即可把此项目当做库项目。



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

第五步:引用MyLib项目。

第六步:编写activtiy_main.xml与对应的Activity。
【activtiy_main.xml】
[html] view plain copy
 print?
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:gravity="center"  
  6.     tools:context=".MainActivity" >  
  7.       
  8.     <com.example.lib.MyImageView   
  9.         android:layout_height="wrap_content"  
  10.         android:layout_width="wrap_content"  
  11.         android:scaleType="matrix"  
  12.         android:src="@drawable/chat_004"  
  13.         android:id="@+id/myImageView"/>  
  14. </RelativeLayout>  

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

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

出现的问题解决:

 1.如果出现support.v4包重复引起的冲突,无法执行,两种处理方法。第一种是把应用项目的v4包删掉(如果还是报错,可能是没有删除干净,查看Java Build Path的Library中是否还有,第二种是查看Android中的添加lib库文件是否有错),或者把库文件中的v4包拷贝一份到应用项目中,把原来的v4包删掉。
 2.如果还是无法引用库项目,重启Eclipse试一下。

源码下载地址

=======点击下载=======
【原文地址:http://blog.csdn.net/mahoking/article/details/36405219】


0 0