EditText画像を挿入してアクセス
8710 ワード
ここでは2つのButtonボタンと1つのEditTextを定義し、画像を挿入すると、画像を挿入するボタンをクリックしてsdカードから1枚の画像を選択します.実装コードは次のとおりです.まずbuttonのリスニングイベントです.
コード解析:ACTION_GET_CONTENTは標準的なActivity Actionの一種で、Activity Actionとは何か、簡単に言えばユーザーに特殊なデータを選択させ、それを得ることです.ACTION_GET_CONTENTは、ユーザーが実行しているプログラムからデータを取得することができ、例えば写真を取ることができます.もちろん、ここで実行しているプログラムは携帯電話のファイルマネージャなどを指します.addCategoryは分類を追加し、どのような分類を追加しますか?CATEGORYを増やすことですOPENABLEでは,文字通りの意味値から開くことができる分類,すなわち取得したuriをContentResolverで解析できるようにするが,ここでの分類は実行の付加条件であることに注意する.settypeとは,取得したデータ型をimage,すなわち写真をとるように設定する.以上の解析から,データを取得するには,データを開くことができ,タイプがimageであるというintentを定義し,実行できることが分かった.
コード分析:1.まずintentを使います.getDataはuri 2を得る.次にBitmapFactoryの復号関数decodeStreamを呼び出し、要求されるパラメータはストリーム(Stream)であるため、ContentResolverでuriをストリームとして解析します.3.次に、ビットマップのサイズをresizeImage関数で再調整し、ここでは4.そして得られた画像をEditTextに入れます
コード分析:getBitmapMime()では、まずSpannablesStringを確立し、rそれから私たちはそれに画像を添付します.この画像は私たちのsdカードから来て、setSpan()関数で、ここには4つのパラメータがあります.ここには4つのパラメータがあります.それぞれ挿入するオブジェクト、開始位置、終了位置、マーク、このプログラムに挿入するオブジェクトは1枚の画像で、開始位置は0で、終了位置はpathの長さです.バッファ内の既存のtextが削除されるとマークされます.ここでpathです.InsertIntoEditText()では、動的に追加するのでEditableを使い、まずssをetに追加してeditTextに入れ、最後にカーソルをセットした位置で最後まで画像を挿入して完成どのように画像を保存しますか?保存ボタンのリスニングイベントコード:
コード分析:コードは非常に簡単で、editTextの中の内容をStringに変換してcontentに保存するだけで、(ここの画像はその経路が/mnt/sdcard/......という形式になることに注意してください)、それから別のActivityを起動して、ここではもちろんcontentをデータベースに保存することもできます.これで、画像の保存が完了しました画像と文字をどのように解析するかまず、私たちはもう一つのActivityを持っています.名前はdisplayです.注ここには図がありません.viewにはEditText が1つしかありませんから.
コード分析:まず前のActivityの内容を取り出し、imagePathに保存します.次にimagePathの画像を画像に変更すればいいです.SpannableStringも使いますが、どのように長いStringの中で画像の経路を見つけますか.正規表現を使うには、私が書いた正規表現/mnt/sdcard/+?.w{3}は、書くのが下手で、ほほほ、正規表現でパスを見つけることでBitmapFactoryで画像を見つけることができ、setSpan()関数で置き換えることができ、最後に表示されます.これで、画像と文字の解析が完了します.
btn_insertImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);
getImage.addCategory(Intent.CATEGORY_OPENABLE);
getImage.setType("image/*");
startActivityForResult(getImage, 1);
}
});
コード解析:ACTION_GET_CONTENTは標準的なActivity Actionの一種で、Activity Actionとは何か、簡単に言えばユーザーに特殊なデータを選択させ、それを得ることです.ACTION_GET_CONTENTは、ユーザーが実行しているプログラムからデータを取得することができ、例えば写真を取ることができます.もちろん、ここで実行しているプログラムは携帯電話のファイルマネージャなどを指します.addCategoryは分類を追加し、どのような分類を追加しますか?CATEGORYを増やすことですOPENABLEでは,文字通りの意味値から開くことができる分類,すなわち取得したuriをContentResolverで解析できるようにするが,ここでの分類は実行の付加条件であることに注意する.settypeとは,取得したデータ型をimage,すなわち写真をとるように設定する.以上の解析から,データを取得するには,データを開くことができ,タイプがimageであるというintentを定義し,実行できることが分かった.
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, intent);
ContentResolver resolver = getContentResolver();
if (resultCode == RESULT_OK) {
if (requestCode == 1) {
originalUri = intent.getData();
try {
Bitmap originalBitmap = BitmapFactory.decodeStream(resolver
.openInputStream(originalUri));
bitmap = resizeImage(originalBitmap, 100, 100);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if (bitmap != null) {
editText = (EditText) findViewById(R.id.edit);
insertIntoEditText(getBitmapMime(bitmap, originalUri));
} else {
Toast.makeText(MainActivity.this, " ",
Toast.LENGTH_SHORT).show();
}
}
}
if (bitmap != null) {
}
}
コード分析:1.まずintentを使います.getDataはuri 2を得る.次にBitmapFactoryの復号関数decodeStreamを呼び出し、要求されるパラメータはストリーム(Stream)であるため、ContentResolverでuriをストリームとして解析します.3.次に、ビットマップのサイズをresizeImage関数で再調整し、ここでは4.そして得られた画像をEditTextに入れます
private SpannableString getBitmapMime(Bitmap pic, Uri uri) {
String path = uri.getPath();
SpannableString ss = new SpannableString(path);
ImageSpan span = new ImageSpan(this, pic);
ss.setSpan(span, 0, path.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return ss;
}
private void insertIntoEditText(SpannableString ss) {
Editable et = editText.getText();// Edittext
int start = editText.getSelectionStart();
et.insert(start, ss);// ss
editText.setText(et);// et Edittext
editText.setSelection(start + ss.length());// Edittext
}
コード分析:getBitmapMime()では、まずSpannablesStringを確立し、rそれから私たちはそれに画像を添付します.この画像は私たちのsdカードから来て、setSpan()関数で、ここには4つのパラメータがあります.ここには4つのパラメータがあります.それぞれ挿入するオブジェクト、開始位置、終了位置、マーク、このプログラムに挿入するオブジェクトは1枚の画像で、開始位置は0で、終了位置はpathの長さです.バッファ内の既存のtextが削除されるとマークされます.ここでpathです.InsertIntoEditText()では、動的に追加するのでEditableを使い、まずssをetに追加してeditTextに入れ、最後にカーソルをセットした位置で最後まで画像を挿入して完成
Button btn_save = (Button) findViewById(R.id.save);
btn_save.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String content = editText.getText().toString();
Bundle data = new Bundle();
data.putString("nei", content);
Intent intent = new Intent(MainActivity.this, Display.class);
intent.putExtra("neirong", data);
startActivity(intent);
}
});
コード分析:コードは非常に簡単で、editTextの中の内容をStringに変換してcontentに保存するだけで、(ここの画像はその経路が/mnt/sdcard/......という形式になることに注意してください)、それから別のActivityを起動して、ここではもちろんcontentをデータベースに保存することもできます.これで、画像の保存が完了しました
EditText display;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.display);
display = (EditText) findViewById(R.id.display);
String imagePath = getIntent().getBundleExtra("neirong").getString(
"nei");
SpannableString ss = new SpannableString(imagePath);
Pattern p=Pattern.compile("/mnt/sdcard/.+?\\.\\w{3}");
Matcher m=p.matcher(imagePath);
while(m.find()){
Bitmap bm = BitmapFactory.decodeFile(m.group());
Bitmap rbm = resizeImage(bm, 100, 100);
ImageSpan span = new ImageSpan(this, rbm);
ss.setSpan(span, m.start(), m.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
display.setText(ss);
}
コード分析:まず前のActivityの内容を取り出し、imagePathに保存します.次にimagePathの画像を画像に変更すればいいです.SpannableStringも使いますが、どのように長いStringの中で画像の経路を見つけますか.正規表現を使うには、私が書いた正規表現/mnt/sdcard/+?.w{3}は、書くのが下手で、ほほほ、正規表現でパスを見つけることでBitmapFactoryで画像を見つけることができ、setSpan()関数で置き換えることができ、最後に表示されます.これで、画像と文字の解析が完了します.