Yes it does. having setScrollX and setScrollY methods the view will translate canvas upon drawing. This is how you get it scrolled automatically. Consider looking into the source code to make these things more clear for yourself.
On Nov 10, 7:40 am, kavitha b <[email protected]> wrote: > No,it is not scrolling. > > Can anybody provide me an example of drawing bitmaps to a scroll custom > view. > > It is very urgent. > > Please help. > > Thanks > Kavitha > > On Wed, Nov 10, 2010 at 6:15 AM, Paul Turchenko > <[email protected]>wrote: > > > View scrolls the bitmap for you. > > > On Nov 10, 12:29 am, kavitha b <[email protected]> wrote: > > > Hi All, > > > > I am creating a CustomView with bigger image based on tutorial on and > > > developers forum. > > > > It is scolling fine.I need exact pixel coordinates of my image.I am > > getting > > > that also. > > > > now I want to draw some images upon scrolling image.I am able to draw > > images > > > using onDraw().But images are not getting scrolled.Any idea how to > > resolve > > > this? > > > > My code is > > > > public class LargeImageScroller extends Activity { > > > > // Physical display width and height. > > > private static int displayWidth = 0; > > > private static int displayHeight = 0; > > > private static Vector<Square> squares; > > > private static Vector<Tile> tiles; > > > > /** Called when the activity is first created. */ > > > @Override > > > public void onCreate(Bundle savedInstanceState) { > > > super.onCreate(savedInstanceState); > > > > // displayWidth and displayHeight will change depending on screen > > > // orientation. To get these dynamically, we should hook > > > onSizeChanged(). > > > // This simple example uses only landscape mode, so it's ok to > > get > > > them > > > // once on startup and use those values throughout. > > > Display display = ((WindowManager) > > > getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); > > > displayWidth = display.getWidth(); > > > displayHeight = display.getHeight(); > > > > squares=Util.generateBoardSquares(); > > > tiles=Util.generateTiles(this); > > > > // SampleView constructor must be constructed last as it needs > > the > > > // displayWidth and displayHeight we just got. > > > setContentView(new SampleView(this)); > > > } > > > > private static class SampleView extends View { > > > private static Bitmap bmLargeImage; //bitmap large enough to be > > > scrolled > > > private static Rect displayRect = null; //rect we display to > > > private Rect scrollRect = null; //rect we scroll over our bitmap > > > with > > > private int scrollRectX = 0; //current left location of scroll > > rect > > > private int scrollRectY = 0; //current top location of scroll > > rect > > > private float scrollByX = 0; //x amount to scroll by > > > private float scrollByY = 0; //y amount to scroll by > > > private float startX = 0; //track x from one ACTION_MOVE to the > > next > > > private float startY = 0; //track y from one ACTION_MOVE to the > > next > > > > private final int boardHeight=480-150; > > > private static Tile movingTile=null; > > > > public SampleView(Context context) { > > > super(context); > > > > // Destination rect for our main canvas draw. It never > > changes. > > > displayRect = new Rect(0, 0, displayWidth, boardHeight); > > > // Scroll rect: this will be used to 'scroll around' over the > > > // bitmap in memory. Initialize as above. > > > scrollRect = new Rect(0, 0, displayWidth, boardHeight); > > > > // Load a large bitmap into an offscreen area of memory. > > > bmLargeImage = BitmapFactory.decodeResource(getResources(), > > > R.drawable.woodstandardboard); > > > } > > > > @Override > > > public boolean onTouchEvent(MotionEvent event) { > > > > switch (event.getAction()) { > > > case MotionEvent.ACTION_DOWN: > > > // Remember our initial down event location. > > > ///validating for tile touch > > > int touchx=(int)event.getX(); > > > int touchy=(int)event.getY(); > > > for(int i=0;i<tiles.size();i++){ > > > Tile tile=tiles.get(i); > > > if(tile.isTouched(touchx, touchy)){ > > > tile.setX(touchx); > > > tile.setY(touchy); > > > movingTile=tile; > > > invalidate(); > > > } > > > } > > > > if(movingTile != null){ > > > > break; > > > } > > > > if((int)event.getY() > boardHeight){ > > > break; > > > } > > > startX = event.getRawX(); > > > startY = event.getRawY(); > > > break; > > > > case MotionEvent.ACTION_MOVE: > > > > if(movingTile != null){ > > > int touchedx=(int)event.getX(); > > > int touchedy=(int)event.getY(); > > > movingTile.setX(touchedx-Util.SQUARE_DIMENSIONS/2); > > > movingTile.setY(touchedy-Util.SQUARE_DIMENSIONS/2); > > > invalidate(); > > > > break; > > > } > > > > if((int)event.getY() > boardHeight){ > > > break; > > > } > > > > float x = event.getRawX(); > > > float y = event.getRawY(); > > > // Calculate move update. This will happen many times > > > // during the course of a single movement gesture. > > > scrollByX = x - startX; //move update x increment > > > scrollByY = y - startY; //move update y increment > > > startX = x; //reset initial values to latest > > > startY = y; > > > > invalidate(); //force a redraw > > > break; > > > > case MotionEvent.ACTION_UP: > > > > ///check if touch is on board > > > int boardx=(int)event.getX()+(int)scrollRectX; > > > int boardy=(int)event.getY()+(int)scrollRectY; > > > System.out.println(boardx); > > > > if(movingTile != null){ > > > > int id=Util.checkSquareTouched(squares, boardx, > > > boardy); > > > System.out.println("ID OF SQUARE="+id); > > > if(id > 0){//valid square is touched > > > Square square=Util.getSquareWithID(squares, > > id); > > > movingTile.setX(square.getX()); > > > movingTile.setY(square.getY()); > > > System.out.println("ID OF > > > TILe="+movingTile.getId()); > > > > } > > > > movingTile=null; > > > invalidate(); > > > break; > > > } > > > > break; > > > } > > > return true; //done with this event so consume it > > > } > > > > @Override > > > protected void onDraw(Canvas canvas) { > > > > // Our move updates are calculated in ACTION_MOVE in the > > > opposite direction > > > // from how we want to move the scroll rect. Think of this as > > > dragging to > > > // the left being the same as sliding the scroll rect to the > > > right. > > > > int newScrollRectX = scrollRectX - (int)scrollByX; > > > int newScrollRectY = scrollRectY - (int)scrollByY; > > > > // Don't scroll off the left or right edges of the > > bitmap. > > > if (newScrollRectX < 0) > > > newScrollRectX = 0; > > > else if (newScrollRectX > (bmLargeImage.getWidth() - > > > displayWidth)) > > > newScrollRectX = (bmLargeImage.getWidth() - > > > displayWidth); > > > > // Don't scroll off the top or bottom edges of the > > bitmap. > > > if (newScrollRectY < 0) > > > newScrollRectY = 0; > > > else if (newScrollRectY > (bmLargeImage.getHeight() - > > > boardHeight)) > > > newScrollRectY = (bmLargeImage.getHeight() - > > > boardHeight); > > > > // We have our updated scroll rect coordinates, set them > > and > > > draw. > > > if(movingTile == null){ > > > scrollRect.set(newScrollRectX, newScrollRectY, > > > newScrollRectX + displayWidth, newScrollRectY > > + > > > boardHeight); > > > } > > > Paint paint = new Paint(); > > > canvas.drawBitmap(bmLargeImage, scrollRect, displayRect, > > > paint); > > > > // Reset current scroll coordinates to reflect the latest > > > updates, > > > // so we can repeat this update process. > > > scrollRectX = newScrollRectX; > > > scrollRectY = newScrollRectY; > > > > //drawing tiles here > > > for(int i=0;i<tiles.size();i++){ > > > Tile tile=tiles.get(i); > > > // if( movingTile == null && tile.getX() > scrollRectX && > > > tile.getY() > scrollRectY) > > > tile.onDraw(canvas,paint); > > > > } > > > > } > > > } > > > > } > > > -- > > 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]<android-developers%[email protected]> > > For more options, visit this group at > >http://groups.google.com/group/android-developers?hl=en > > -- 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

