您的位置:首页 > 移动开发 > Android开发

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

2016-05-25 14:04 519 查看
由于在开发过程,为了实现未曾了解的某种效果与特定功能,而求助于网上优秀的开源项目,在使用过程中发现引用开源的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引用他人的代码,在此表示感谢。】

[java] view
plain copy

 print?





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】

[html] view
plain copy

 print?





<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】

[java] view
plain copy

 print?





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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息