最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android選擇與上傳圖片之ImagePicker教程

 更新時(shí)間:2021年08月18日 17:20:50   作者:yechaoa  
這篇文章主要介紹了在Android中對于圖片的選擇與上傳方法,本文介紹了ImagePicker的相關(guān)使用教程,學(xué)習(xí)Android的同學(xué)進(jìn)來看看吧

效果圖:

后來又出了兩篇,也可以看一下

Android選擇與上傳圖片之PictureSelector教程

Android選擇與上傳圖片之Matisse教程

添加依賴:

選擇圖片:compile 'com.lzy.widget:imagepicker:0.5.4'

github地址:https://github.com/jeasonlzy/ImagePicker

上傳文件:compile 'com.zhy:okhttputils:2.6.2'

github地址:https://github.com/hongyangAndroid/okhttputils

MainActivity.java

package com.yechaoa.uploadimage;
 
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.AdapterView;
 
import com.lzy.imagepicker.ImagePicker;
import com.lzy.imagepicker.bean.ImageItem;
import com.lzy.imagepicker.ui.ImageGridActivity;
import com.lzy.imagepicker.ui.ImagePreviewDelActivity;
import com.lzy.imagepicker.view.CropImageView;
 
import java.util.ArrayList;
import java.util.List;
 
import okhttp3.Call;
 
public class MainActivity extends AppCompatActivity implements ImagePickerAdapter.OnRecyclerViewItemClickListener{
 
    public static final int IMAGE_ITEM_ADD = -1;
    public static final int REQUEST_CODE_SELECT = 100;
    public static final int REQUEST_CODE_PREVIEW = 101;
 
    private ImagePickerAdapter adapter;
    private ArrayList<ImageItem> selImageList; //當(dāng)前選擇的所有圖片
    private int maxImgCount = 8;               //允許選擇圖片最大數(shù)
 
    private HttpUtil httpUtil;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        httpUtil = new HttpUtil();
 
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                uploadImage(selImageList);
            }
        });
 
        //最好放到 Application oncreate執(zhí)行
        initImagePicker();
        initWidget();
 
    }
 
    private void initImagePicker() {
        ImagePicker imagePicker = ImagePicker.getInstance();
        imagePicker.setImageLoader(new GlideImageLoader());   //設(shè)置圖片加載器
        imagePicker.setShowCamera(true);                      //顯示拍照按鈕
        imagePicker.setCrop(true);                            //允許裁剪(單選才有效)
        imagePicker.setSaveRectangle(true);                   //是否按矩形區(qū)域保存
        imagePicker.setSelectLimit(maxImgCount);              //選中數(shù)量限制
        imagePicker.setMultiMode(false);                      //多選
        imagePicker.setStyle(CropImageView.Style.RECTANGLE);  //裁剪框的形狀
        imagePicker.setFocusWidth(800);                       //裁剪框的寬度。單位像素(圓形自動取寬高最小值)
        imagePicker.setFocusHeight(800);                      //裁剪框的高度。單位像素(圓形自動取寬高最小值)
        imagePicker.setOutPutX(1000);                         //保存文件的寬度。單位像素
        imagePicker.setOutPutY(1000);                         //保存文件的高度。單位像素
    }
 
    private void initWidget() {
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        selImageList = new ArrayList<>();
        adapter = new ImagePickerAdapter(this, selImageList, maxImgCount);
        adapter.setOnItemClickListener(this);
 
        recyclerView.setLayoutManager(new GridLayoutManager(this, 4));
        recyclerView.setHasFixedSize(true);
        recyclerView.setAdapter(adapter);
    }
 
    private SelectDialog showDialog(SelectDialog.SelectDialogListener listener, List<String> names) {
        SelectDialog dialog = new SelectDialog(this, R.style.transparentFrameWindowStyle, listener, names);
        if (!this.isFinishing()) {
            dialog.show();
        }
        return dialog;
    }
 
    @Override
    public void onItemClick(View view, int position) {
        switch (position) {
            case IMAGE_ITEM_ADD:
                List<String> names = new ArrayList<>();
                names.add("拍照");
                names.add("相冊");
                showDialog(new SelectDialog.SelectDialogListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        switch (position) {
                            case 0: // 直接調(diào)起相機(jī)
                                //打開選擇,本次允許選擇的數(shù)量
                                ImagePicker.getInstance().setSelectLimit(maxImgCount - selImageList.size());
                                Intent intent = new Intent(MainActivity.this, ImageGridActivity.class);
                                intent.putExtra(ImageGridActivity.EXTRAS_TAKE_PICKERS,true); // 是否是直接打開相機(jī)
                                startActivityForResult(intent, REQUEST_CODE_SELECT);
                                break;
                            case 1:
                                //打開選擇,本次允許選擇的數(shù)量
                                ImagePicker.getInstance().setSelectLimit(maxImgCount - selImageList.size());
                                Intent intent1 = new Intent(MainActivity.this, ImageGridActivity.class);
                                startActivityForResult(intent1, REQUEST_CODE_SELECT);
                                break;
                            default:
                                break;
                        }
                    }
                }, names);
                break;
            default:
                //打開預(yù)覽
                Intent intentPreview = new Intent(this, ImagePreviewDelActivity.class);
                intentPreview.putExtra(ImagePicker.EXTRA_IMAGE_ITEMS, (ArrayList<ImageItem>) adapter.getImages());
                intentPreview.putExtra(ImagePicker.EXTRA_SELECTED_IMAGE_POSITION, position);
                intentPreview.putExtra(ImagePicker.EXTRA_FROM_ITEMS,true);
                startActivityForResult(intentPreview, REQUEST_CODE_PREVIEW);
                break;
        }
    }
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {
            //添加圖片返回
            if (data != null && requestCode == REQUEST_CODE_SELECT) {
                ArrayList<ImageItem> images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);
                if (images != null){
                    selImageList.addAll(images);
                    adapter.setImages(selImageList);
                }
            }
        } else if (resultCode == ImagePicker.RESULT_CODE_BACK) {
            //預(yù)覽圖片返回
            if (data != null && requestCode == REQUEST_CODE_PREVIEW) {
                ArrayList<ImageItem> images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_IMAGE_ITEMS);
                if (images != null){
                    selImageList.clear();
                    selImageList.addAll(images);
                    adapter.setImages(selImageList);
                }
            }
        }
    }
 
    private String url="http...";
 
    private void uploadImage(ArrayList<ImageItem> pathList) {
        httpUtil.postFileRequest(url, null, pathList, new MyStringCallBack() {
 
            @Override
            public void onError(Call call, Exception e, int id) {
                super.onError(call, e, id);
            }
 
            @Override
            public void onResponse(String response, int id) {
                super.onResponse(response, id);
                //返回圖片的地址
            }
        });
    }
 
}

Demo地址:點(diǎn)此下載

到此這篇關(guān)于Android選擇與上傳圖片之ImagePicker教程的文章就介紹到這了,更多相關(guān)Android圖片選擇上傳ImagePicker內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入Android線程的相關(guān)問題解惑

    深入Android線程的相關(guān)問題解惑

    本篇文章是對Android線程的相關(guān)問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Input系統(tǒng)截?cái)嗖呗缘姆治雠c應(yīng)用詳解

    Input系統(tǒng)截?cái)嗖呗缘姆治雠c應(yīng)用詳解

    這篇文章主要為大家介紹了Input系統(tǒng)截?cái)嗖呗缘姆治雠c應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Android寫一個(gè)實(shí)時(shí)輸入框功能

    Android寫一個(gè)實(shí)時(shí)輸入框功能

    這篇文章主要介紹了Android寫一個(gè)實(shí)時(shí)輸入框功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Android自定義視圖中圖片的處理

    Android自定義視圖中圖片的處理

    Android系統(tǒng)提供了ImageView顯示普通的靜態(tài)圖片,也提供了AnimationDrawable來開發(fā)逐幀動畫,還可通過Animation對普通圖片使用補(bǔ)間動畫。圖形、圖像處理不僅對Android系統(tǒng)的應(yīng)用界面非常重要,而且Android系統(tǒng)上的益智類游戲、2D游戲都需要大量的圖形、圖像處理
    2022-07-07
  • Android studio案例之實(shí)現(xiàn)電話撥號

    Android studio案例之實(shí)現(xiàn)電話撥號

    這篇文章主要介紹了Android studio案例之實(shí)現(xiàn)電話撥號,并有詳細(xì)的步驟和實(shí)現(xiàn)代碼,對此感興趣的同學(xué),可以參考下
    2021-04-04
  • Flutter StaggeredGridView實(shí)現(xiàn)瀑布流效果

    Flutter StaggeredGridView實(shí)現(xiàn)瀑布流效果

    這篇文章主要為大家詳細(xì)介紹了Flutter StaggeredGridView實(shí)現(xiàn)瀑布流效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Android簡潔的下拉放大刷新效果示例

    Android簡潔的下拉放大刷新效果示例

    本篇文章主要介紹了Android簡潔的下拉放大刷新效果示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Android RecyclerView多類型布局卡片解決方案

    Android RecyclerView多類型布局卡片解決方案

    這篇文章主要介紹了Android RecyclerView多類型布局卡片解決方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • Android 自定義陰影效果詳解及實(shí)例

    Android 自定義陰影效果詳解及實(shí)例

    這篇文章主要介紹了Android 自定義陰影效果詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 解析Android中實(shí)現(xiàn)滑動翻頁之ViewFlipper的使用詳解

    解析Android中實(shí)現(xiàn)滑動翻頁之ViewFlipper的使用詳解

    有一些場景,我們需要向用戶展示一系列的頁面。比如我們正在開發(fā)一個(gè)看漫畫的應(yīng)用,可能就需要向用戶展示一張一張的漫畫圖片,用戶使用手指滑動屏幕,可以在前一幅漫畫和后一幅漫畫之間切換。這個(gè)時(shí)候ViewFlipper就是一個(gè)很好的選擇
    2013-05-05

最新評論

辽宁省| 东安县| 三原县| 洛阳市| 井陉县| 舟山市| 龙海市| 阳新县| 张家界市| 天镇县| 东乡县| 祁阳县| 宾阳县| 天等县| 无为县| 新昌县| 大连市| 惠州市| 二连浩特市| 名山县| 扎赉特旗| 广宗县| 旺苍县| 繁峙县| 永寿县| 中西区| 余庆县| 吉木萨尔县| 河间市| 石屏县| 灌南县| 比如县| 卓资县| 浦东新区| 蓝田县| 汤阴县| 洛隆县| 华坪县| 磐石市| 长沙市| 元阳县|