Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 創建Library Project(庫項目)與引用操作

Android 創建Library Project(庫項目)與引用操作

編輯:關於Android編程

由於在開發過程,為了實現未曾了解的某種效果與特定功能,而求助於網上優秀的開源項目,在使用過程中發現引用開源的Library Project(庫項目),的確可以解決很多問題,而且也給出了一種思路,好的軟件公司也需要有自己的Library Project(庫項目),這樣不必要進行重復開發工作,這只是自己的想法。下面將自己的心得或體會記錄如下,以下是自己的編寫風格。

 

應用場景:

在項目的開發過程中,經常會使用公司內部的公共庫或使用優秀的開源項目庫,以求達到快速開發、代碼復用的效果。所開發的項目中要集成其他項目由於集成項目龐大,不想機械的復制,就想將集成的項目做成項目庫。基於這樣的需求,引用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】

    
	

【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

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved