前回はEvernoteに保存した画像をAndroid上で表示させてみました。今回は表示した画像をタップすることで、
まず、
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
public class HelloEDAM extends Activity implements OnItemClickListener {
そして、
this.imgView = (GridView) findViewById(R.id.image_grid_view);
this.imgView.setNumColumns(4);
this.imgView.setOnItemClickListener(this);
OnItemClickListenerで実装しなければならないのは、
public void onItemClick(AdapterView> parent, View v, int position, long id) {
if (getNoteStore() != null && this.filePath != null) {
try {
// 現在の位置のオブジェクトを取得
ImageResource image = (ImageResource)parent.getItemAtPosition(position);
Note note = getNoteStore().getNote(getAuthToken(), image.getNoteGuid(),
true, true, false, false);
// 現在の画像をリソースから削除
Iterator iter = note.getResourcesIterator();
while (iter.hasNext()) {
Resource resource = iter.next();
if(resource.getGuid().equals(image.getGuid())) {
iter.remove();
}
}
// 選択した画像のリソースを設定
InputStream in = new BufferedInputStream(new FileInputStream(this.filePath));
FileData data = new FileData(EDAMUtil.hash(in), new File(this.filePath));
in.close();
Resource resource = new Resource();
resource.setData(data);
resource.setMime(this.mimeType);
note.addToResources(resource);
// ノートの更新
String content =
NOTE_PREFIX + "このノートは新しい画像で置き換えられました
" +
" " +
NOTE_SUFFIX;
note.setContent(content);
getNoteStore().updateNote(getAuthToken(), note);
Toast.makeText(this, R.string.msg_image_saved, Toast.LENGTH_LONG).show();
} catch (Throwable t) {
Toast.makeText(this, R.string.err_fetching_notes, Toast.LENGTH_LONG).show();
Log.e(TAG, getString(R.string.err_fetching_notes), t);
}
}
}
ImageResource image = (ImageResource)parent.
ノートに含まれる画像を置き換えるために、
ノートの更新には、
タップの場所とノートやリソースのGUIDを紐づける
さて、
package com.evernote.android.sample;
import com.evernote.edam.type.Data;
import com.evernote.edam.type.Resource;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class ImageResource {
private String noteGuid;
private String guid;
private Bitmap bitmap;
public ImageResource(Resource resource) {
this.noteGuid = resource.getNoteGuid();
this.guid = resource.getGuid();
Data data = resource.getData();
this.bitmap = BitmapFactory.decodeByteArray(data.getBody(), 0, data.getSize());
}
public String getNoteGuid() {
return this.noteGuid;
}
public String getGuid() {
return this.guid;
}
public Bitmap getBitmap() {
return this.bitmap;
}
}
また、
public class ImageAdapter extends BaseAdapter {
private Context c;
private ArrayList<ImageResource> imageList;
public ImageAdapter(Context c) {
this(c, new ArrayList<ImageResource>());
}
public ImageAdapter(Context c, ArrayList<ImageResource> imageList) {
this.c = c;
this.imageList = imageList;
}
......
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(c);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageBitmap(this.imageList.get(position).getBitmap());
return imageView;
}
}
最後に、 これで完成です。"Show Images"で画像一覧を表示した後に、 今回まで数回に渡って、 今回取り上げたサンプルコードはこちらからダウンロードできます。 ダウンロード後、for (Resource resource : resources) {
String mime = resource.