zoukankan      html  css  js  c++  java
  • Android 创建Library Project(库项目)与引用操作

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    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】

    1
    2
    3
    4
    <relativelayout android:gravity="center" android:layout_height="match_parent" android:layout_width="match_parent" tools:context=".MainActivity" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
         
        <com.example.lib.myimageview android:id="@+id/myImageView/" android:layout_height="wrap_content" android:layout_width="wrap_content" android:scaletype="matrix" android:src="@drawable/chat_004">
    </com.example.lib.myimageview></relativelayout>


    【MainActivtiy.java】

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    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,出现如下效果。

  • 相关阅读:
    Android组件化和插件化开发
    开发一流的 Android SDK:Fabric SDK 的创建经验
    关系 和非关系 阻塞非阻塞的区别
    AJAX 中JSON 和JSONP 的区别 以及请求原理
    九马画山数命运, 一身伴君不羡仙! 与代码不离不弃!
    移动端 transitionEnd函数用来检测过渡是否完成
    2017前端该学的知识 分享墨白的文章、大家共勉!
    移动端和pc端事件绑定方式以及取消浏览器默认样式和取消冒泡
    今天要带来的是移动端开发的基础内容
    离线存储
  • 原文地址:https://www.cnblogs.com/wlming/p/5408705.html
Copyright © 2011-2022 走看看