Android模仿QQ空間圖片上傳——原理

來源:互聯網
上載者:User

標籤:

MainActivity.class

package com.example.imagedemotext;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.ContentResolver;import android.content.Intent;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Bundle;import android.provider.MediaStore.Images.Thumbnails;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.GridView;import android.widget.ImageView;public class MainActivity extends Activity {    Button btn_start;    GridView gridview;        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btn_start = (Button) findViewById(R.id.btn_start);        gridview = (GridView) findViewById(R.id.gridview);        adapter = new Myadapter();        iniLisner();        inidata();    }    private void refreshAdapter(){        if(list == null){            list = new ArrayList<String>();        }        if(adapter == null){            adapter = new Myadapter();        }        if(list.size() == ON){            list.remove(list.size() - 1);        }        adapter.notifyDataSetChanged();    }    private final int ON = 5;  //允許的圖片數量 + 1    private void inidata() {        if(list == null){            list = new ArrayList<String>();            list.add("a");  //添加預設圖片          }        gridview.setAdapter(adapter);        gridview.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                if(list.get(position).equals("a")){                    setClick();                }            }        });                refreshAdapter();    }        Myadapter adapter;    class Myadapter extends BaseAdapter{        @Override        public int getCount() {return list.size();}        @Override        public Object getItem(int position) {return null;}        @Override        public long getItemId(int position) {return 0;}        @Override        public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder vh = null;            if(convertView == null){                convertView = View.inflate(getApplicationContext(), R.layout.item, null);                vh = new ViewHolder();                vh.iamge = (ImageView) convertView.findViewById(R.id.image);                convertView.setTag(vh);            }else {                vh = (ViewHolder) convertView.getTag();            }            if(list.get(position).equals("a")){  //添加預設圖片                  vh.iamge.setImageResource(R.drawable.ic_launcher);            }else {                Bitmap loacalBitmap = getLoacalBitmap(list.get(position));                if(loacalBitmap != null){                    vh.iamge.setImageBitmap(loacalBitmap);                }            }            return convertView;        }            }    class ViewHolder {        ImageView iamge;    }        private void iniLisner() {        if(btn_start != null){            btn_start.setOnClickListener(new OnClickListener() {                                @Override                public void onClick(View v) {                    setClick();                }            });                    }            }        private void setClick(){        Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);        getImage.addCategory(Intent.CATEGORY_OPENABLE);        getImage.setType("image/jpeg");        startActivityForResult(getImage, 0);            }    private byte[] mContent;    private List<String> list;    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        ContentResolver resolver = getContentResolver();        if(data == null){            return;        }        if (requestCode == 0) {            try {                Uri originalUri = data.getData();                mContent = readStream(resolver.openInputStream(Uri.parse(originalUri.toString())));                String path = originalUri.toString();                ContentResolver testcr = getContentResolver();                Cursor cur = testcr.query(originalUri, null, null, null, null);                if(list.size() == ON){                    removeItem();                    refreshAdapter();                    return;                }                removeItem();                for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {                    int dataColumn = cur.getColumnIndex(Thumbnails.DATA);                    String image_path = cur.getString(dataColumn);                    list.add(image_path);                }                list.add("a");                refreshAdapter();                            } catch (Exception e) {                System.out.println(e.getMessage());            }        }                     }    private void removeItem() {        if(list.size() -1 != ON){            if(list.size() != 0){  //刪除預設圖片                list.remove(list.size() - 1);            }        }            }    public static byte[] readStream(InputStream inStream) throws Exception {        byte[] buffer = new byte[1024];        int len = -1;        ByteArrayOutputStream outStream = new ByteArrayOutputStream();        while ((len = inStream.read(buffer)) != -1) {            outStream.write(buffer, 0, len);        }        byte[] data = outStream.toByteArray();        outStream.close();        inStream.close();        return data;    }    public static Bitmap getLoacalBitmap(String url) {         try {              FileInputStream fis = new FileInputStream(url);              return BitmapFactory.decodeStream(fis);         } catch (FileNotFoundException e) {              e.printStackTrace();              return null;         }    }}

activity_main.xml

<LinearLayout 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:orientation="vertical"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="點擊按鈕選擇一個圖片後會顯示在下面的GridView" />    <Button        android:id="@+id/btn_start"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="擷取圖片" />    <View        android:layout_width="match_parent"        android:layout_height="9dp"        android:background="#a0000000" />    <GridView        android:id="@+id/gridview"        android:layout_width="match_parent"        android:layout_height="match_parent" >    </GridView></LinearLayout>

item.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:orientation="vertical" >    <ImageView        android:id="@+id/image"        android:layout_width="40dp"        android:layout_height="40dp" /></LinearLayout>

 

Android模仿QQ空間圖片上傳——原理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.