Hey Piawi, Actually I've found this:
http://groups.google.com/group/android-developers/browse_thread/thread/5f37bf2efd75abbd I've managed to modify it a little bit and it works reasonably well. It's not perfect, but I'm sure any issues can be ironed out. Regards, Tane On Jul 4, 2:11 pm, Piwaï <[email protected]> wrote: > Hi, > > I am sorry I won't be of any help on this topic. But I will have to > develop exactly that functionnality (an image viewer being part of an > Android application) starting on tuesday. So if you find any solution > to your problem, please do not hesitate to post it. And if I find a > solution (but I won't work on this before tuesday), I promess I'll > post it ;-). > > Best Regards, > Piwaï > > On Jul 4, 12:50 am, Tane Piper <[email protected]> wrote: > > > Hey folks, > > > A few weeks ago I posted a view I was working on and in that time I > > have improved the view a lot, but I've been asked to add a new > > features of zooming into the image. > > > The view is a custom image viewer that allows large images (such as > > 640x1000) to be loaded, and the user to scroll around using either the > > touchscreen or trackball on the device. The code below is reasonably > > succesful in that it works at the default scale level of 1. > > > But with addign zooming, instead of zooming into the 'centre' of the > > location the user is looking at, and allowing the user to move around > > the whole of the image at this level it instead zooms into the top and > > left of the location, and in doing so it starts to cut off the bottom > > and right of the image whole, so while zoomed in you cannot go any > > ruther right or down in the image, but you can go to the top and left > > easily enough. > > > The best example of what I am trying to achive is the Image viewer in > > the camera application. > > > So my two questions are: > > > 1) Can anyone suggest how I can fix this in the canvas or > > 2) Is there a better way to do this with an existing feature in the > > framework? > > > I'm probably thinking it's something to do with the modifierValue when > > scrolling around that I somehow need to increase this, but trying this > > causes my activity to crash. > > > Code: > > > public class ZN5ScrollView extends View { > > > public ZN5ScrollView(Context context, AttributeSet attrs) { > > super(context, attrs); > > > scrollX = 0; > > scrollY = 0; > > scale = 1.0f; > > modifierValue = 50; > > > ViewPaint = new Paint(); > > > TypedArray a = context.obtainStyledAttributes(attrs, > > R.styleable.ZN5ScrollView); > > LoadedBitmap = > > BitmapFactory.decodeResource(context.getResources(), > > a.getResourceId(R.styleable.ZN5ScrollView_src, R.drawable.icon)); > > > IMAGE_WIDTH = LoadedBitmap.getWidth(); > > IMAGE_HEIGHT = LoadedBitmap.getHeight(); > > > ViewBitmap = Bitmap.createBitmap(LoadedBitmap); > > } > > > protected void onSizeChanged (int w, int h, int oldw, int oldh) { > > SCREEN_WIDTH = w; > > SCREEN_HEIGHT = h; > > > if (IMAGE_WIDTH < SCREEN_WIDTH) { > > IMAGE_WIDTH = SCREEN_WIDTH - scrollX; > > } > > if (IMAGE_HEIGHT < SCREEN_HEIGHT) { > > IMAGE_HEIGHT = SCREEN_HEIGHT - scrollY; > > } > > > } > > > @Override > > protected void onDraw(Canvas canvas) { > > super.onDraw(canvas); > > canvas.scale(scale, scale); > > canvas.drawBitmap(ViewBitmap, 0f, 0f, ViewPaint); > > } > > > public void handleView(int zoomType) { > > switch (zoomType) { > > case ZOOM_IN: > > if (scale <= 1.5f) { > > scale = scale + 0.1f; > > } > > break; > > case ZOOM_OUT: > > if (scale > 1.0f) { > > scale = scale -0.1f; > > } > > break; > > } > > invalidate(); > > > } > > > public void handleScroll(float distX, float distY) { > > /* X-Axis */ > > if(distX > 6.0) { > > if(scrollX < IMAGE_WIDTH) { > > scrollX = Math.min(IMAGE_WIDTH - SCREEN_WIDTH, > > scrollX + > > modifierValue); > > } > > } > > else if(distX < -6.0) { > > if(scrollX >= 50) { > > scrollX = Math.min(IMAGE_WIDTH + SCREEN_WIDTH, > > scrollX - > > modifierValue); > > } else { > > scrollX = 0; > > } > > } > > > /* Y-Axis*/ > > if(distY > 6.0) { > > if(scrollY < IMAGE_HEIGHT) { > > scrollY = Math.min(IMAGE_HEIGHT - SCREEN_HEIGHT, > > scrollY + > > modifierValue); > > } > > } > > else if(distY < -6.0) { > > if(scrollY >= 50) { > > scrollY = Math.min(IMAGE_HEIGHT + SCREEN_HEIGHT, > > scrollY - > > modifierValue); > > } else { > > scrollY = 0; > > } > > } > > > if((scrollX <= IMAGE_WIDTH) && (scrollY <= IMAGE_HEIGHT)) { > > ViewBitmap = Bitmap.createBitmap(LoadedBitmap, scrollX, > > scrollY, > > SCREEN_WIDTH, SCREEN_HEIGHT); > > invalidate(); > > } > > > } > > > private int modifierValue; > > > private float scale; > > public final int ZOOM_IN = 1; > > public final int ZOOM_OUT = 2; > > > private int SCREEN_WIDTH; > > private int SCREEN_HEIGHT; > > > private int IMAGE_WIDTH; > > private int IMAGE_HEIGHT; > > > private int scrollX; > > private int scrollY; > > > private Bitmap LoadedBitmap; > > private Bitmap ViewBitmap; > > private Paint ViewPaint; > > > } > > > Regards, > > Tane --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---

