Android -- 打開本地圖片且顯示路徑


背景                                                                                         

imageimage

image

代碼                                                                                          

先上布局文件:

<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"
    tools:context=".MainActivity" >
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/hello_world"/>
    <ImageView
        android:id="@+id/pic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:contentDescription="@string/app_name"/>
</LinearLayout>

這里沒有TextView,我最后是將路徑以System.out.println方式輸出的。

初始化:

button = (Button)findViewById(R.id.button);
        pic = (ImageView) findViewById(R.id.pic);
        button.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO 自動生成的方法存根
                System.out.println("onClick");
                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(intent, 1);
            }
        });

對於startActivityForResult的回調函數進行覆寫:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO 自動生成的方法存根
        System.out.println(requestCode+"");
        if(requestCode==1)
        {
            //獲得圖片的uri 
            Uri uri = data.getData();
            //外界的程序訪問ContentProvider所提供數據 可以通過ContentResolver接口
            ContentResolver cr = this.getContentResolver();
            Bitmap bitmap;
            //Bitmap bm; //這是一種方式去讀取圖片
            try 
            {
                //bm = MediaStore.Images.Media.getBitmap(cr, uri); 
                //pic.setImageBitmap(bm);
                bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));
                pic.setImageBitmap(bitmap);
                System.out.println("GOOD");
                //第一種方式去讀取路徑
                //String[] proj = {MediaStore.Images.Media.DATA};
                /*
                 //好像是android多媒體數據庫的封裝接口,具體的看Android文檔
                Cursor cursor = managedQuery(uri, proj, null, null, null); 
                //按我個人理解 這個是獲得用戶選擇的圖片的索引值
                int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
              //將光標移至開頭 ,這個很重要,不小心很容易引起越界
                cursor.moveToFirst();
                //最后根據索引值獲取圖片路徑
                String path = cursor.getString(column_index);
                System.out.println(path);
                   */
                //第二種方式去讀取路徑
                Cursor cursor =this.getContentResolver().query(uri, null, null, null, null);
                int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                cursor.moveToFirst();
                String path = cursor.getString(column_index);
                System.out.println(path);                
            } 
            catch (Exception e)
            {
                // TODO 自動生成的 catch 塊
                e.printStackTrace();
                System.out.println("BAD");
            }
            
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

最后的path就是路徑。

我是天王蓋地虎的分割線                                                                

源代碼:http://pan.baidu.com/s/1dD1Qx01

OpenPic.zip

 

 

 

轉載請注明出處:http://www.cnblogs.com/yydcdut/p/3720594.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM