Androidのアイコン交換の問題

4084 ワード

最近、顔を変える問題に遭遇しました.ネット上に資料がたくさんあることを知っていますが、私も調べましたが、あまり満足していません.思想の問題かもしれません.顔を変えるには、まず2つの方法があるに違いない.第一に、自分で写真を撮ってアップロードして、これはとても简単で、カメラを呼び出して、それからあるフォルダの下に保存して、それから呼び出してokすることができて、呼び出しシステムのカメラもとても简単で、何行のコードの事、ネット上のたくさんの资料.しかし、どのように地元の写真を取得してアップロードしたのか、私はsdカードを遍歴して画像ファイルを見つけたに違いないと思います.画像も1枚だけではありません.どうして選ばれたことを知っていますか.この問題は私が心配しすぎて、考えすぎたのかもしれません.実はファイルセレクタを開いて、自分の欲しいものを見つけて、画像のパスを取得して、最後に1つの方法で完成することができます.次はコードを貼ります.レイアウトファイルはbuttonとImageViewが1つしかないので、貼り付けたくありません.
package com.cocos.yuriko;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {
	private static final int FILE_SELECT_CODE = 1;
	private Button button1;
	private ImageView imageView1;
	private String path;

	public String getPath() {
		return path;
	}

	public void setPath(String path) {
		this.path = path;
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button1 = (Button) findViewById(R.id.button1);
		imageView1 = (ImageView) findViewById(R.id.imageView1);
		button1.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				showFileChooser();
			}
		});
	}

	//        
	private void showFileChooser() {
		Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
		//           ,      
		intent.setType("*/*");
		//         
		intent.addCategory(Intent.CATEGORY_OPENABLE);

		try {
			//     Activity
			this.startActivityForResult(
					Intent.createChooser(intent, "Select a File to Upload"),
					FILE_SELECT_CODE);
		} catch (android.content.ActivityNotFoundException ex) {
			// Toast,       
			Toast.makeText(this, "Please install a File Manager.",
					Toast.LENGTH_SHORT).show();
		}
	}

	//     
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		switch (requestCode) {
		case FILE_SELECT_CODE:
			if (resultCode == RESULT_OK) {
				// Get the Uri of the selected file
				Uri uri = data.getData();
				//               ,                  
				//         get      ,         
				// String path=FileUtils.getPath(this, uri);
				this.setPath(FileUtils.getPath(this, uri));
				Toast.makeText(MainActivity.this, path, Toast.LENGTH_SHORT)
						.show();
			}
			break;
		}
		super.onActivityResult(requestCode, resultCode, data);
	}
}

class FileUtils {
	//     
	//         ,     ,     ,       
	public static String getPath(Context context, Uri uri) {

		if ("content".equalsIgnoreCase(uri.getScheme())) {
			String[] projection = { "_data" };
			Cursor cursor = null;

			try {
				cursor = context.getContentResolver().query(uri, projection,
						null, null, null);
				int column_index = cursor.getColumnIndexOrThrow("_data");
				if (cursor.moveToFirst()) {
					return cursor.getString(column_index);
				}
			} catch (Exception e) {
				// Eat it
			}
		}

		else if ("file".equalsIgnoreCase(uri.getScheme())) {
			return uri.getPath();
		}

		return null;
	}

}
このステップでは、ファイルセレクタを大きく開くことができ、フルパスを取得することができます.私たちが全経路を得ることができる以上、私たちはやりやすいです.これらの方法はそのコールバックの方法を除いて.
onActivity Result()他はすべてカプセル化できます
さあ、getPath()この方法は直接持ってきて、showFileChooser()はActivityパラメータを追加する必要があります.画像を変えるコードを貼り付けます
	 // sd      Imageview 
	 public void Readsdimage(ImageView imageview,String path){
		 BitmapFactory.Options options=new BitmapFactory.Options();
		 options.inSampleSize=2;
		 Bitmap bm=BitmapFactory.decodeFile(path,options);
		 imageview.setImageBitmap(bm);
	 }

この方法では、ImageViewコントロールとpathパスを追加する必要があります.パスは上で入手できますが、ImageViewコントロールはxmlレイアウトに書けばいいです.皆さんがパッケージを使うなら、この方法はActivityでそのまま使えばいいので、ImageViewコントロールを入れればいいので、必ずバインドしてから使うことを覚えておいてください.