美文网首页
调用内置的Gallery查看图片点击并回传

调用内置的Gallery查看图片点击并回传

作者: 蛋蛋不哭 | 来源:发表于2016-04-13 09:19 被阅读84次

    调用内置的Gallery查看SD卡中的图片,点击图片并回传,通过缩放与模拟器尺寸大小相适应并进行显示。

    MainActivity.java

    public class MainActivity extends Activity implements OnClickListener {
    
        private Button gallery;
        private ImageView img,img2;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            iviview();
        }
    
        private void iviview() {
            gallery = (Button) findViewById(R.id.gallery);
            img = (ImageView) findViewById(R.id.img);
            img2 = (ImageView) findViewById(R.id.img2);
            gallery.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            if (v == gallery) {
                Intent i = new Intent(
                        Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(i, 0);
            }
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == 0) {
                if (resultCode == RESULT_OK) {
                    // 获得地址
                    Uri imguri = data.getData();
                    // 获得模拟器的宽和高
                    Display imgdp = getWindowManager().getDefaultDisplay();
                    int wd = imgdp.getWidth()/2;
                    int hd = imgdp.getHeight()/2-100;
                    // 我们要获得 图片的尺寸,如果图片很大 可能会导致图片溢出
                    // 加载图片并非是图片本身
                    BitmapFactory.Options bo = new BitmapFactory.Options();
                    bo.inJustDecodeBounds = true;
                    // 这里的流需要转换
                    try {
                        Bitmap bmp = BitmapFactory.decodeStream(
                                getContentResolver().openInputStream(imguri), null,
                                bo);
                        // 现在我们获得图片与模拟器的比例
                        int wdbili = (int) Math.ceil((float) bo.outWidth
                                / (float) wd);
                        int hdbili = (int) Math.ceil((float) bo.outHeight
                                / (float) hd);
                        // 判断比例大于1
                        if (wdbili > 1 || hdbili > 1) {
                            // 我们判断比例大小
                            if (wdbili > hdbili) {
                                bo.inSampleSize = wdbili;
                            } else {
                                bo.inSampleSize = hdbili;
                            }
                        }
                        // 处理完之后 我们还要从新加载图片
                        bo.inJustDecodeBounds = false;
                        bmp = BitmapFactory.decodeStream(getContentResolver()
                                .openInputStream(imguri), null, bo);
                        //在位图上绘制一张图片
                        Bitmap upbmp = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());
                        //我们创建一张画布
                        Canvas cv = new Canvas(upbmp);
                        //我们创建一个笔
                        Paint paint = new Paint();
                        
                        //我们要用笔进行绘制
                        //cv.drawBitmap(bmp, 0, 0, paint);
                        
                        //创建一个matrix , 进行大小改变
                        Matrix matrix = new Matrix();
                        matrix.setValues(new float[]{
                                0.5f,0,0,
                                0,0.5f,0,
                                0,0,0.5f
                        });
                        
                        //旋转(正数顺时针,负数逆时针)
                        matrix.setRotate(30);
                        //固定哪一个点进行旋转
                        matrix.setRotate(30);
                        matrix.setRotate(30, upbmp.getWidth(), upbmp.getHeight());
                        
                        //平移
                        matrix.setTranslate(20, 20);
                        
                        //缩放(倍数)
                        matrix.setScale(1.5f, 2);
    
                       //镜像的感觉
                        matrix.setScale(-1, 1);
                        matrix.postTranslate(upbmp.getWidth(), 0);
    
                        //倒立
                        matrix.setScale(1, -1);
                        matrix.postTranslate(0, upbmp.getHeight());
    
                        //我们通过matrix进行改变图片大小
                        cv.drawBitmap(bmp, matrix, paint);
                        //进行显示
                        img.setImageBitmap(bmp);
                        //进行显示
                        img2.setImageBitmap(upbmp);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
    

    activity_main.xml

    <RelativeLayout 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: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" >
    
         <Button
             android:id="@+id/gallery"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_alignParentLeft="true"
             android:layout_alignParentTop="true"
             android:layout_marginLeft="24dp"
             android:text="打开画廊" />
    
         <ImageView
             android:id="@+id/img"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_alignLeft="@+id/gallery"
             android:layout_below="@+id/gallery"
             android:layout_marginTop="20dp"
             />
    
         <ImageView
             android:id="@+id/img2"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_alignLeft="@+id/gallery"
             android:layout_below="@+id/gallery"
             android:layout_marginTop="20dp"
             />
    
    
    </RelativeLayout>
    

    相关文章

      网友评论

          本文标题:调用内置的Gallery查看图片点击并回传

          本文链接:https://www.haomeiwen.com/subject/fcvwlttx.html