Android:停止图像缩小 [英] Android : Stop image scaling down

查看:24
本文介绍了Android:停止图像缩小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在视图中绘制图像,但在尝试保持原始图像的比例时遇到问题.基本上,我有一个小视图,我想在视图中显示图像的一部分.然后目的是对图像执行翻译,以便在视图中出现不同的部分.

I'm trying to draw an image in a view but having problems trying to maintain the scale of the original image. Basically, I have a small view and I would like to show part of the image in the view. The intention then is to perform a translation on the image so that a different part appears in the view.

无论我尝试什么,图像都会自动缩小以适应视图,或者整个图像都是可见的.我试过在 BitmapDrawable、ImageView 和 Layout 上设置设置都无济于事.

No matter what I try, either the image is down-scaled automatically to fit the view or the whole image is viewable. I've tried playing about with the settings on BitmapDrawable, ImageView and Layout to no avail.

有人知道实现这一目标的好方法吗?

Anyone know a good way to achieve this?

推荐答案

希望这段代码有帮助.我一个月前用谷歌搜索过.它是较大图像的滚动性能.此处将整个显示尺寸设置为视图的高度和宽度.你可以改变你知道.并且还可以保持缩放控制.

Hope This piece of code helps. I have googled it a month ago. It Scrolling performance for the Larger Images.Here whole display size is set as the Height and width of the view. You can change you know. and also can maintain the zoom controls too.

public class LargeImageScroller extends Activity {

// Physical display width and height.
private static int displayWidth = 0;
private static int displayHeight = 0;

/** 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();

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

     public SampleView(Context context) {
          super(context);

          // Destination rect for our main canvas draw. It never changes.
          displayRect = new Rect(0, 0, displayWidth, displayHeight);
          // Scroll rect: this will be used to 'scroll around' over the
          // bitmap in memory. Initialize as above.
          scrollRect = new Rect(0, 0, displayWidth, displayHeight);

          // Load a large bitmap into an offscreen area of memory.
          bmLargeImage = BitmapFactory.decodeResource(getResources(),
               R.drawable.testlargeimage);
     }

     @Override
     public boolean onTouchEvent(MotionEvent event) {

          switch (event.getAction()) {
               case MotionEvent.ACTION_DOWN:
                    // Remember our initial down event location.
                    startX = event.getRawX();
                    startY = event.getRawY();
                    break;

               case MotionEvent.ACTION_MOVE:
                    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;
          }
          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() - displayHeight))
               newScrollRectY = (bmLargeImage.getHeight() - displayHeight);

          // We have our updated scroll rect coordinates, set them and draw.
          scrollRect.set(newScrollRectX, newScrollRectY,
               newScrollRectX + displayWidth, newScrollRectY + displayHeight);
          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;

     }
}
}

这篇关于Android:停止图像缩小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆