Androidのアイコン交換の問題
4084 ワード
最近、顔を変える問題に遭遇しました.ネット上に資料がたくさんあることを知っていますが、私も調べましたが、あまり満足していません.思想の問題かもしれません.顔を変えるには、まず2つの方法があるに違いない.第一に、自分で写真を撮ってアップロードして、これはとても简単で、カメラを呼び出して、それからあるフォルダの下に保存して、それから呼び出してokすることができて、呼び出しシステムのカメラもとても简単で、何行のコードの事、ネット上のたくさんの资料.しかし、どのように地元の写真を取得してアップロードしたのか、私はsdカードを遍歴して画像ファイルを見つけたに違いないと思います.画像も1枚だけではありません.どうして選ばれたことを知っていますか.この問題は私が心配しすぎて、考えすぎたのかもしれません.実はファイルセレクタを開いて、自分の欲しいものを見つけて、画像のパスを取得して、最後に1つの方法で完成することができます.次はコードを貼ります.レイアウトファイルはbuttonとImageViewが1つしかないので、貼り付けたくありません.
onActivity Result()他はすべてカプセル化できます
さあ、getPath()この方法は直接持ってきて、showFileChooser()はActivityパラメータを追加する必要があります.画像を変えるコードを貼り付けます
この方法では、ImageViewコントロールとpathパスを追加する必要があります.パスは上で入手できますが、ImageViewコントロールはxmlレイアウトに書けばいいです.皆さんがパッケージを使うなら、この方法はActivityでそのまま使えばいいので、ImageViewコントロールを入れればいいので、必ずバインドしてから使うことを覚えておいてください.
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コントロールを入れればいいので、必ずバインドしてから使うことを覚えておいてください.