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

來源:互聯網
上載者:User

標籤:android   library   庫   開源   matrix   

       由於在開發過程,為了實現未曾瞭解的某種效果與特定功能,而求助於網上優秀的開源項目,在使用過程中發現引用開源的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);}/** * 必要的初始化 */@Overrideprotected 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);}}@Overridepublic 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;@Overrideprotected 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() {@Overridepublic 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.