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

2021年9月27日 7点热度 0条评论 来源: Hoking

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

【转载使用,请注明出处:http://blog.csdn.net/mahoking/article/details/36405219

应用场景:

       在项目的开发过程中,经常会使用公司内部的公共库或使用优秀的开源项目库,以求达到快速开发、代码复用的效果。所开发的项目中要集成其他项目由于集成项目庞大,不想机械的复制,就想将集成的项目做成项目库。基于这样的需求,引用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引用他人的代码,在此表示感谢。】

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,出现如下效果。



下载地址

=======点击下载=======
【转载使用,请注明出处:
http://blog.csdn.net/mahoking/article/details/36405219

参考资料

1、http://blog.sina.com.cn/s/blog_783ede0301016ip2.html



    原文作者:Hoking
    原文地址: https://blog.csdn.net/ma_hoking/article/details/36405219
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。