package dk.thoerup.side9; import java.util.ArrayList; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; public class PictureView extends Activity { final static int CONTEXT_VIEWIMG = 1000; final static String TAG = "Side9Pigen"; TextView mDescription; TextView mCaption; ImageView mImageView; ArrayList mImagePaths; int mIndex; Bitmap mBitmap; @SuppressWarnings("unchecked") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.pictureview); mImagePaths = (ArrayList) getIntent().getSerializableExtra("images"); mIndex = getIntent().getIntExtra("index", 0); mImageView = (ImageView) findViewById(R.id.imageview); mImageView.setOnTouchListener( new Touch() ); mCaption = (TextView) findViewById(R.id.caption); mDescription = (TextView) findViewById(R.id.description); loadImage(); } private void loadImage(int newIndex) { Log.e(TAG, "NewIndex " + newIndex); if (newIndex != mIndex) { mIndex = newIndex; loadImage(); } } private void loadImage() { ImageEntry currentImage = mImagePaths.get(mIndex); mBitmap = BitmapFactory.decodeFile( currentImage.path ); mImageView.setImageBitmap(mBitmap); if (currentImage.caption.length() > 0) { mCaption.setVisibility(View.VISIBLE); mCaption.setText(currentImage.caption); } else { mCaption.setVisibility(View.INVISIBLE); } String pathParts[] = currentImage.path.split("/"); String fileName = pathParts[ pathParts.length -1]; String desc = "" + (mIndex +1) + "/" + mImagePaths.size() + " - " + fileName; mDescription.setText(desc); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuItem item = menu.add(Menu.NONE, CONTEXT_VIEWIMG, Menu.NONE, "Built-in viewer"); item.setIcon( android.R.drawable.ic_menu_gallery); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { boolean res; switch(item.getItemId()) { case CONTEXT_VIEWIMG: String uri = "file://" + mImagePaths.get(mIndex); Intent i = new Intent(Intent.ACTION_VIEW); i.setDataAndType(Uri.parse(uri), "image/jpeg"); startActivity(i); res = true; break; default: res = super.onOptionsItemSelected(item); } return res; } class Touch implements View.OnTouchListener { Float firstX = null; @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { firstX = event.getX(); } else { if (firstX != null) { float x = event.getX(); float diff = firstX - x; if (diff > 150) { int newIndex = Math.min(mIndex+1, mImagePaths.size() -1); loadImage(newIndex); firstX = null; return false; } if (diff < -150) { int newIndex = Math.max(mIndex-1, 0); loadImage(newIndex); firstX = null; return false; } } } return true; } } }