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

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

Android 创建Library Project(库项目)与引用操作,布布扣,bubuko.com

时间: 2024-10-10 07:36:26

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

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

原文网址:http://www.2cto.com/kf/201407/313718.html 应用场景: 在项目的开发过程中,经常会使用公司内部的公共库或使用优秀的开源项目库,以求达到快速开发.代码复用的效果.所开发的项目中要集成其他项目由于集成项目庞大,不想机械的复制,就想将集成的项目做成项目库.基于这样的需求,引用Library Project(库项目),成为了迫切的需要,这样做以后集成项目升级.扩展也都方便与快捷.为此,我们不得不去了解Android Library Project(库项目

Android Studio创建库项目及引用

Android Studio创建库项目其实创建的是在主项目下创建Module模块,这个Module模块创建的时候选择库项目模式. 为什么要这样处理呢?因为在Android Studio中一个WorkSpace工作空间就是一个Android主项目.主项目其实也就是这个工作空间的一个Module模块,只不过这个模块是一个主模块.如果要想创建库项目,显而易见也应该是一个module模块项目,设置成Library就可以了. 然后自动生成的build.gradle文件里面会有一行标示 apply plug

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

在使用Android Studio开发时,用到了第三方库SlidingMenu(现在已经不推荐使用了),尽管如此,但具体怎么导入第三方库还是需要知道的,在查阅各种资料后,知道了一种比较容易可行的方法 具体步骤如下 1.首先,需要从GitHub上下载去SlidingMenu (https://github.com/jfeinstein10/SlidingMenu) 2.接下来在你的项目上右击New->Module(这样避免了修改gradle的繁琐步骤),然后选择Android Library 3.

Android创建library工程

本文着重介绍如何创建Android library,并且在工程中使用此library提供的资源,具体步骤如下:1. 创建一个Android工程,命名为sourceProj2. 右键--properties,点击Android标签,然后选中最下面的Is library,把本工程设为android library.3. 创建另一个Android工程,命名为MyProj4. 右键--properties,点击Android标签,在Library选项框中,单机“添加”,选中刚才建立的android li

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

背景 引入一个布局库:com.zhy:percent-support-extends 然后sync now 成功了,也就是同步成功了. 然而开始使用的时候报告了: The following classes could not be found: -?com.zhy.android.percent.support.PercentLinearLayout (Fix Build Path, Edit XML, Create Class) Tip: Try to build the project.

第五课-Android库项目

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

iOS中静态库的制作——使用创建静态库项目的方式创建静态库

最近公司要求写SDK,我就想把它弄成静态库的方式 我的理解:所谓静态库,就是把所有的.m文件打包成一个.a文件,这样使分享代码的时候更加简洁,重要的是别人也不会看到你.m文件中的傻B代码了 环境是Xcode6.2 iOS8.2 首先,创建一个静态库项目 删掉Xcode自动创建的同名文件,然后导入你需要做成静态库的文件 在这里我导入一个简单的输出字符串的文件 然后选择运行的设备进行编译,这里我有不理解的地方:在Xcode6.2中,当我首先选择模拟器,然后编译文件的时候,.a文件依然是红色的,说明静

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

来源:http://help.adobe.com/zh_CN/flashbuilder/using/WSe4e4b720da9dedb5-1a92eab212e75b9d8b2-7ffe.html 为应用程序配置库 创建 Flex 库项目 创建 AIR 库项目 将组件添加到库项目中 选择要包括在 SWC 文件中的库项目元素 构建库项目 在项目中使用 SWC 文件 将 SWC 文件添加到库路径 编译时将 SWC 文件合并到应用程序 SWF 文件中 将 SWC 文件设置为外部库文件 将 SWC 文件

android使用library

  http://www.vogella.com/tutorials/AndroidLibraryProjects/article.html     介绍support lib使用 http://developer.android.com/tools/support-library/setup.html   Adding libraries without resources   Make sure you have downloaded the Android Support Library