Android菜鸟练习第一课 调用系统裁剪功能裁剪图片上传服务器

来源:互联网 发布:plc编程及应用第3版 编辑:程序博客网 时间:2024/05/01 07:46
第一部分Activity中的代码
import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.util.Base64;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.Toast;import com.example.liying.dzdp.R;import com.loopj.android.http.AsyncHttpClient;import com.loopj.android.http.AsyncHttpResponseHandler;import com.loopj.android.http.RequestParams;import org.apache.http.Header;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import base.EduActivity;/** * @version 2.0 * @类描述: * @项目名称:DZDP * @类名称: MainActivity * @包名称: activity * @创建人: liying * @创建时间:16/11/7 14:20 * @修改人: * @修改时间:16/11/7 14:20 * @修改备注: 调用系统相机,相册,裁剪后上传服务器 */public class MainActivity extends EduActivity {    private Button mBtnCamera,mBtnAlbum;    public static final int CAMERA_REQUEST_CODE = 1000;    public static final int GALLERY_REQUEST_CODE = 1001;    public static final int CROP_REQUEST_CODE = 1002;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);    }    @Override    public void init() {        mBtnCamera = (Button) findViewById(R.id.btn_camera);        mBtnCamera.setOnClickListener(this);        mBtnAlbum = (Button) findViewById(R.id.btn_gallery);        mBtnAlbum.setOnClickListener(this);    }    @Override    public void onClickEvent(View view) {        switch (view.getId()){            case R.id.btn_camera:                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);                startActivityForResult(intent, CAMERA_REQUEST_CODE);                break;            case R.id.btn_gallery:                Intent intent1 = new Intent(Intent.ACTION_GET_CONTENT);                intent1.setType("image/*");                startActivityForResult(intent1, GALLERY_REQUEST_CODE);                break;        }    }    @Override    public void setContentLayout() {        setContentView(R.layout.activity_splash);    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        if(data!=null){            switch (requestCode){                case CAMERA_REQUEST_CODE:                    Bundle extras = data.getExtras();                    if(extras != null)                    {                        Bitmap bm = extras.getParcelable("data");                        Uri uri = saveBitmap(bm);                        startImageZoom(uri);                    }                    break;                case GALLERY_REQUEST_CODE:                    Uri uri;                    uri = data.getData();                    Uri fileUri = convertUri(uri);                    startImageZoom(fileUri);                    break;                case CROP_REQUEST_CODE:                    Bundle extras2 = data.getExtras();                    if(extras2 == null){                        return;                    }                    Bitmap bm = extras2.getParcelable("data");                    ImageView imageView = (ImageView)findViewById(R.id.iv_show);                    imageView.setImageBitmap(bm);                    sendImage(bm);                    break;            }        }        super.onActivityResult(requestCode, resultCode, data);    }    //调用系统裁剪图片功能    private void startImageZoom(Uri uri)    {        Intent intent = new Intent("com.android.camera.action.CROP");        intent.setDataAndType(uri, "image/*");        intent.putExtra("crop", "true");        //设置裁剪的比例        intent.putExtra("aspectX", 1);        intent.putExtra("aspectY", 1);        //设置裁剪图片的大小        intent.putExtra("outputX", 150);        intent.putExtra("outputY", 150);        //是否返回数据        intent.putExtra("return-data", true);        startActivityForResult(intent, CROP_REQUEST_CODE);    }    //转换Uri格式    private Uri convertUri(Uri uri)    {        InputStream is = null;        try {            is = getContentResolver().openInputStream(uri);            Bitmap bitmap = BitmapFactory.decodeStream(is);            is.close();            return saveBitmap(bitmap);        } catch (Exception e) {            e.printStackTrace();            return null;        }    }    //将bitmap转换成Uri    private Uri saveBitmap(Bitmap bm)    {        File tmpDir = new File(Environment.getExternalStorageDirectory() + "/com.liying.avater");        if(!tmpDir.exists())        {            //路径不存在创建路径            tmpDir.mkdir();        }        File img = new File(tmpDir.getAbsolutePath() + "avater.png");        try {            FileOutputStream fos = new FileOutputStream(img);            bm.compress(Bitmap.CompressFormat.PNG, 85, fos);            fos.flush();            fos.close();            return Uri.fromFile(img);        } catch (Exception e) {            e.printStackTrace();            return null;        }    }    //向服务器发送图片 使用的是asynchttp框架    private void sendImage(Bitmap bm)    {        ByteArrayOutputStream stream = new ByteArrayOutputStream();        bm.compress(Bitmap.CompressFormat.PNG, 60, stream);        byte[] bytes = stream.toByteArray();        String img = new String(Base64.encodeToString(bytes, Base64.DEFAULT));        AsyncHttpClient client = new AsyncHttpClient();        RequestParams params = new RequestParams();        params.add("img", img);        client.post("http://192.168.56.1/ImgUpload.php", params, new AsyncHttpResponseHandler() {            //如果Header报红需要在build.gradle中Android节点添加 useLibrary 'org.apache.http.legacy'            @Override            public void onSuccess(int i, Header[] headers, byte[] bytes) {                Toast.makeText(MainActivity.this,"Upload Success!",Toast.LENGTH_SHORT).show();            }            @Override            public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {                Toast.makeText(MainActivity.this,"Upload Fail!",Toast.LENGTH_SHORT).show();            }        });    }}
第二部分 布局代码
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:gravity="center_horizontal"    android:orientation="vertical"    android:layout_height="match_parent">    <ImageView        android:layout_width="150dp"        android:layout_height="150dp"        android:id="@+id/iv_show"        android:background="@color/colorAccent"        android:layout_marginTop="60dp"        />    <Button        android:layout_marginTop="30dp"        android:id="@+id/btn_camera"        android:text="相机选择"        android:layout_width="100dp"        android:layout_height="50dp" />    <Button        android:layout_marginTop="10dp"        android:id="@+id/btn_gallery"        android:text="相册选择"        android:layout_width="100dp"        android:layout_height="50dp" /></LinearLayout>
第三部分 清单文件代码
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.liying.dzdp" >
    //内存卡读取权限及访问网络权限    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <uses-permission android:name="android.permission.INTERNET"/>    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme" >        <activity android:name="activity.MainActivity" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>
第四部分 build.gradle代码
apply plugin: 'com.android.application'android {    //Header报红请添加这一行代码    useLibrary 'org.apache.http.legacy'    compileSdkVersion 23    buildToolsVersion "23.0.3"    defaultConfig {        applicationId "com.example.liying.dzdp"        minSdkVersion 11        targetSdkVersion 23        versionCode 1        versionName "1.0"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')    testCompile 'junit:junit:4.12'    compile 'com.android.support:appcompat-v7:23.4.0'    compile files('libs/android-async-http-1.4.6.jar')}

0 0