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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM