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
-~----------~----~----~----~------~----~------~--~---

Reply via email to