zoukankan      html  css  js  c++  java
  • Android自己定义动态布局 — 多图片上传

    Android自己定义动态布局 — 多图片上传


    本文介绍Android中动态布局加入图片,多图片上传。


    项目中效果图:

      


    技术点:

    1.动态加入格局中的线条和加入图片的+号

    2.多张图片异步上传


    首先来看一下布局文件:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#f2f2f2" >
    
        <LinearLayout
            android:id="@+id/layout_CONTENT"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#f2f2f2"
            android:orientation="vertical"
            android:padding="5dp" >
    
            <!-- 布局由程序动态生成 -->
    
            <LinearLayout
                android:id="@+id/layout_container"
                android:layout_width="300dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_margin="5dp"
                android:background="#cbcbcb"
                android:orientation="vertical"
                android:padding="0.2px" />
    
            <TextView
                android:id="@+id/text_no_data"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="20dp"
                android:text="@string/text_picture_upload"
                android:textSize="16dp" />
        </LinearLayout>
    
    </LinearLayout>
    

    布局非常easy。主要是id为layout_container的一个LinearLayout作为父布局。



    横向的线条和纵向的线条布局也非常easy:

    <View xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:background="#cbcbcb" />
    

    <View xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="1px"
        android:layout_height="match_parent"
        android:background="#cbcbcb" />
    



    以下是动态生成布局的实现方式:

    private void initUI() {
            setContentView(R.layout.activity_main);
            //setTitle(R.string.button_service_upload_picture);
            //showBackwardView(R.string.button_backward, true);
            //showForwardView(R.string.button_upload,true);
    
            //最顶层父布局
            mLayout = (ViewGroup) findViewById(R.id.layout_container);
    
            final int count = 9;    //9格
            final int rowCount = (count + 2) / 3;
    
            for (int i = 0; i < rowCount; i++) {
    
                if (i != 0) {
                    //载入横向布局线条
                    View.inflate(this, R.layout.layout_line_horizonal, mLayout);
                }
                //创建布局对象,设置按下颜色
                final LinearLayout linearLayout = new LinearLayout(this);
                linearLayout.setBackgroundResource(R.drawable.row_selector);
    
                for (int j = 0; j < 3; j++) {
    
                    if (j != 0) {
                        //载入内层纵向布局线条
                        View.inflate(this, R.layout.layout_line_vertical, linearLayout);
                    }
    
                    ImageButton imageButton = new ImageButton(this);
                    imageButton.setBackgroundResource(R.drawable.row_selector);
                    imageButton.setTag(TAG);
                    imageButton.setOnClickListener(this);
                    imageButton.setEnabled(false);
                    LinearLayout.LayoutParams layoutParams =
                            new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1.0f);
                    //加入到linearLayout布局中
                    linearLayout.addView(imageButton, layoutParams);
    
                    //将imageButton对象加入到列表
                    mImageButtonList.add(imageButton);
                }
    
                DisplayManager manager = DisplayManager.getInstance();
                LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, manager.dipToPixel(100));
                //将View加入到总父布局
                mLayout.addView(linearLayout, layoutParams);
            }
            //外层设置ImageButton属性
            final ImageButton currentImageButton = mImageButtonList.get(mCurrent);
            currentImageButton.setImageResource(R.drawable.ic_add_picture);
            currentImageButton.setScaleType(ScaleType.CENTER);
            currentImageButton.setEnabled(true);
    
        }


    图片上传功能:

     private class UploadPictureTask extends AsyncTask<List<String>, Integer, String> {
    
            /* (non-Javadoc)
             * @see android.os.AsyncTask#doInBackground(Params[])
             */
            @Override
            protected String doInBackground(List<String>... params) {
                final List<String> pictureList = params[0];
                for (int i = 0, len = pictureList.size(); i < len; i++) {
                    final File file = new File(pictureList.get(i));
                    //final String response = ApacheHttpUtils.post(mUrlPrefix + "/upload", new File[] {file});
                    // 解析。存储
                    //final UploadInfo upload = new UploadParser().parse(response).getData();
                    /*if (upload != null) {
                        final String url = upload.getUrl();
                        if (url != null) {
                            mPictureUrlList.add(url);
                        }
                    }*/
                    publishProgress(i);
                }
                return null;
            }
    
            /* (non-Javadoc)
             * @see android.os.AsyncTask#onProgressUpdate(Progress[])
             */
            @Override
            protected void onProgressUpdate(Integer... values) {
    
            }
    
            /* (non-Javadoc)
             * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
             */
            @Override
            protected void onPostExecute(String result) {
                //addPictures();
                super.onPostExecute(result);
            }
        }

    注:类中声明了三个列表去保存之前所操作的记录

    mImageButtonList = new ArrayList<ImageButton>();
            mPicturePathList = new ArrayList<String>();
            mPictureUrlList = new ArrayList<String>();



    关于细节大家感兴趣的下载源代码学习吧。


    欢迎下载源代码:http://download.csdn.net/download/gao_chun/8776533


    转载请注明.

  • 相关阅读:
    用于爬取知乎某个话题下的精华问题中所有回答的爬虫
    BSP -- 图书共享系统(Book Sharing Platform)
    【已解决】WPS2018 从第三页开始插入页眉页码(即前两页不要页眉页码)
    【编译原理】大白话讲解 First 集和 Follow 集的构造算法
    如果
    HTTP协议(1)------->资源和URL
    JavaWeb框架_Struts2_(八)----->Struts2的国际化
    深入理解java虚拟机----->垃圾收集器与内存分配策略(下)
    深入理解java虚拟机----->垃圾收集器与内存分配策略(上)
    JavaWeb框架_Struts2_(七)----->文件的上传和下载
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6994930.html
Copyright © 2011-2022 走看看