Изображение снижается на краю экрана

Если я хочу переместить позицию моего изображения в то место, где часть правой части изображения будет проходить мимо видимого экрана, изображение имеет тенденцию к сжатию, и все изображение имеет тенденцию оставаться на краю экрана, то же самое может быть Сказал, что если я опускаю изображение, чтобы пройти мимо нижней части экрана, изображение сжимается и никогда не проходит мимо нижнего края экрана,

Но если я перемещаю позицию изображения вверх или слева, размер изображения не увядает, и изображение проходит мимо экрана, как я этого хочу, мне любопытно, есть ли у кого-нибудь советы, как я могу исправить эту проблему. Thankyou

mainLayout = (ViewGroup)findViewById(R.id.id_layout); deviceScreenSize = new Point(); thisContext = this; mainDisplay = getWindowManager().getDefaultDisplay(); mainDisplay.getSize(deviceScreenSize); offsetX = (deviceScreenSize.x / 320.0f); offsetY = (deviceScreenSize.y / 568.0f); mainIMG = new ImageView(this); mainIMG.setImageDrawable(getResources().getDrawable(R.drawable.myimg)); SetPos(0, 0, 320, 568); mainIMG.setLayoutParams(layoutPositioner); mainLayout.addView(mainIMG); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } public void SetPos(float x, float y, float width, float height) { layoutPositioner = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); layoutPositioner.topMargin = (int)(y * offsetY); layoutPositioner.leftMargin = (int)(x * offsetX); layoutPositioner.width = (int)(width * offsetX); layoutPositioner.height = (int)(height * offsetY); } public void SetPosWithoutOffset(float x, float y, float width, float height) { layoutPositioner = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); layoutPositioner.topMargin = (int)(y); layoutPositioner.leftMargin = (int)(x); layoutPositioner.width = (int)(width); layoutPositioner.height = (int)(height); } 

Вот наглядный пример проблемы ОПИСАНИЕ

Это происходит потому, что вы обрабатываете только левое и верхнее поля при позиционировании в методе SetPos() :

 layoutPositioner.topMargin = (int)(y * offsetY); layoutPositioner.leftMargin = (int)(x * offsetX); 

Итак, чтобы решить эту проблему, вы должны обрабатывать все направления следующим образом:

 // first get screen width and height DisplayMetrics metrices = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(metrices); int windowWidth = metrices.widthPixels; int windowHeight = metrices.heightPixels; //then set your margins int x_cord = (int)(x * offsetX); int y_cord = (int)(y * offsetY); layoutPositioner.topMargin = y_cord; layoutPositioner.leftMargin = x_cord; layoutPositioner.bottomMargin = windowHeight - (y_cord - your_image.getHeight()); layoutPositioner.rightMargin= windowWidth - (x_cord - your_image.getWidth());