• android一个上传图片的样例,包含怎样终止上传过程,假设在上传的时候更新进度条(一)


    先上效果图:



    Layout为:

    <?

    xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/black" android:orientation="vertical"> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:isScrollContainer="true"> <ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="centerInside" android:id="@+id/photo_upload_preview_image" android:layout_centerInParent="true"> </ImageView> <!-- photo_upload_progress_item的位置跟photo_upload_preview_image是一样的,为了显示photo_upload_preview_image还在loading --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="10dp" android:paddingBottom="10dp" android:orientation="horizontal" android:id="@+id/photo_upload_progress_item" android:layout_centerInParent="true" android:visibility="gone"> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="4dp" android:layout_gravity="center_vertical" android:visibility="visible" style="?android:attr/progressBarStyleSmall" android:indeterminateDrawable="@drawable/progress_bar_drawable"> </ProgressBar> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center" android:textColor="@drawable/white" android:text="正在加载照片..."> </TextView> </LinearLayout> </RelativeLayout> <!-- photo_upload_progress_layout在photo_upload_preview_image的正底下。带有进度条,显示photo_upload_preview_image的上传进度 --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/photo_upload_progress_layout" android:orientation="vertical" android:background="@drawable/black" android:visibility="gone"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="10dp" android:background="@drawable/upload_photo_progress_bg" android:layout_marginTop="6dp" android:layout_marginBottom="6dp" android:layout_marginLeft="6dp" android:layout_marginRight="6dp" android:layout_gravity="center_horizontal" android:paddingLeft="0dp" android:paddingRight="0dp" android:id="@+id/photo_upload_progress_bar_container"> <View android:layout_width="3dp" android:layout_height="fill_parent" android:id="@+id/photo_upload_progress_bar" android:background="@drawable/upload_photo_progress_bar"> </View> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="6dp" android:layout_gravity="center_horizontal" android:text="照片上传中..." android:textColor="@drawable/white"> </TextView> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/photo_upload_bottom_bar" android:orientation="vertical" android:background="#BFBFBF" android:paddingLeft="10dp" android:paddingRight="10dp" android:paddingBottom="4dp" android:paddingTop="2dp"> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/photo_upload_album_layout" android:paddingTop="5dp" android:background="#BFBFBF"> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:text="上传至" android:textSize="16dp" android:singleLine="true" android:textColor="@drawable/gray2" android:gravity="center_vertical" android:id="@+id/photo_upload_ablum_prompt"> </TextView> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/photo_upload_ablum_prompt" android:layout_marginLeft="5dp" android:text="手机相冊" android:textSize="16dp" android:singleLine="true" android:gravity="center_vertical" android:textColor="@drawable/black" android:id="@+id/photo_upload_ablum_name"> </TextView> <!-- 在右側,能够选择专辑 --> <Button android:id="@+id/photo_upload_choose_album" android:layout_width="wrap_content" android:layout_height="40dp" android:layout_alignParentRight="true" android:text="专辑" android:textColor="@drawable/black" android:paddingRight="30dp" android:background="@drawable/location_button"> </Button> </RelativeLayout> <!-- 这个在photo_upload_album_layout的以下为位置添加模块 --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/photo_upload_location_layout" android:layout_below="@id/photo_upload_album_layout" android:layout_width="fill_parent" android:layout_height="wrap_content"> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/photo_upload_location_right_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:background="#BFBFBF" android:paddingTop="5dp" android:paddingBottom="5dp"> <Button android:id="@+id/photo_upload_add_gps" android:layout_width="wrap_content" android:layout_height="40dp" android:text="位置" android:textColor="@drawable/black" android:paddingRight="30dp" android:background="@drawable/location_button"> </Button> </RelativeLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/photo_upload_location_left_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="5dp" android:layout_alignParentLeft="true" android:layout_toLeftOf="@id/photo_upload_location_right_layout"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="10dp" android:id="@+id/photo_upload_location_icon" android:src="@drawable/location" > </ImageView> <Button android:id="@+id/photo_upload_remove_location" android:layout_width="wrap_content" android:layout_height="40dp" android:text="移除" android:textColor="@drawable/black" android:background="@drawable/common_button_style" android:layout_alignParentRight="true" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" > </Button> <TextView android:id="@+id/photo_upload_location_des" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@drawable/black" android:layout_marginTop="10dp" android:layout_toLeftOf="@id/photo_upload_remove_location" android:layout_toRightOf="@id/photo_upload_location_icon"> </TextView> </RelativeLayout> </RelativeLayout> <!-- 这个editText用户能够输入一些信息,在位置模块的正下方 --> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/photo_upload_title" android:singleLine="true" android:maxLength="63" android:maxLines="3" android:hint="请输入:" android:inputType="textMultiLine"> </EditText> <!-- 这两个button在editText的正下方 --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="15dp" android:background="@drawable/common_button_style" android:text="上传" android:id="@+id/photo_upload_button_upload" android:textColor="@drawable/black" android:layout_weight="1" android:textSize="18dp"> </Button> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/common_button_style" android:text="取消" android:id="@+id/photo_upload_button_cancel" android:textColor="@drawable/black" android:layout_weight="1" android:textSize="18dp"> </Button> </LinearLayout> </LinearLayout> </LinearLayout>


    这里我们是把本地SD根文件夹下的一张图片,转成Bitmap,再存到要上传的tmp文件夹里面:

    private class LoadPhotoTask extends AsyncTask<Void, Void, Boolean>{
    		private Bitmap mLoadedBitmap = null;
    		
        	protected Boolean doInBackground(Void... params) {
        		try {
    				if(mFilePathName.length() > 0){
    					File file = new File(mFilePathName);
    					if (!file.exists()) {
    						return false;
    					}
    					BitmapFactory.Options opt = new BitmapFactory.Options();
    					long fileSize = file.length();
    					int maxSize = 2*1024 * 1024;
    					if(fileSize <= maxSize){
    						opt.inSampleSize = 1;
    					}else if(fileSize <= maxSize * 4){ <strong>//小于8M</strong>
    						opt.inSampleSize = 2;
    					}else{
    						long times = fileSize / maxSize;
    						opt.inSampleSize = (int)(Math.log(times) / Math.log(2.0)) + 1; <strong>//Math.log返回以e为底的对数</strong>
    					}
    					try{
    						mLoadedBitmap = BitmapFactory.decodeFile(mFilePathName,opt);<strong>//opt为缩小的倍数</strong>
    						mUploadFilePathName = SaveBitmapToFile(mLoadedBitmap);
    					}catch(OutOfMemoryError e){
    						Toast.makeText(UploadPhotoActivity.this, 
    								   getResources().getString(R.string.no_memory_to_view_photo), 
    								   Toast.LENGTH_SHORT).show();
    						UploadPhotoActivity.this.finish();
    						
    					}
    				}
    				return true;
    			} catch (Exception e) {
    				Log.e("UploadPhotoActivity", "doInBackground", e);
    				return false;
    			}
        	}  
        	
        	
        	protected void onPostExecute(Boolean result){
        		try {
    				showLoadPreviewProgressBar(false);
    				if(mLoadedBitmap != null){
    					ImageView IamgePreView = (ImageView)findViewById(R.id.photo_upload_preview_image);
    					IamgePreView.setImageBitmap(mLoadedBitmap);
    				}else{
    					
    				}
    				mLoadedBitmap = null;
    			} catch (Exception e) {
    				Log.e("UploadPhotoActivity", "onPostExecute", e);
    			}
        	}
        }

    private String SaveBitmapToFile(Bitmap bmp){
    		if (null == bmp) {
    			return null;
    		}
    		String fileName = "upload_tmp.jpg";
    		<strong>File f = this.getFileStreamPath(fileName);</strong>//data/data/com.example.tianqitongtest/files/upload_tmp.jpg,这个是要上传的文件存的位置
    		if (f.exists()) {
    			f.delete();
    		}
    		FileOutputStream ostream;
    		try {
    			<strong>int targetWidth = 780;
    			int w = bmp.getWidth();
    			if (w > targetWidth) {
    				int h = bmp.getHeight();
    				int targetHeight = (targetWidth * h) / w;
    				bmp = Bitmap.createScaledBitmap(bmp, targetWidth, targetHeight,
    						true);//依据指定宽度和高度来生成一个新的Bitmap
    			}</strong>
    			ostream = this.openFileOutput(fileName, MODE_PRIVATE);
    			bmp.compress(Bitmap.CompressFormat.JPEG, 70, ostream);
    			ostream.flush();
    			ostream.close();
    			ostream = null;
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return f.getAbsolutePath();
    	}

    上传的时候须要把键盘收起:

    private void hideInputMethod(){
    		View view = getCurrentFocus();
    		if(view != null){
    		    ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    		}
    	}
    	

    得到SD卡上的11.jpg的图片路径:

    private String getStoredPicPath() {
    		String fileName = "11.jpg";
    		return Environment.getExternalStorageDirectory()+"/"+fileName;
    	}
    	


  • 相关阅读:
    ueditor集成ckplayer
    PHP结合Ueditor并修改图片上传路径
    dedecms5.7安装百度(ueditor)编辑器的方法
    织梦实现截取标题时当大于截取的长度时加省略号的功能
    织梦DEDECMS首页、列表页面动态调用点击次数的方法
    织梦dedecms列表页面如何调用文章作者
    dedecms织梦nginx下伪静态规则设置
    DedeCMS编辑文章不更新时间的方法
    dedecms栏目页开启伪静态的方法
    如何开启Apache Rewrite功能
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5176705.html
Copyright © 2020-2023  润新知