Java event.getRawX()不';与显示宽度不匹配

Java event.getRawX()不';与显示宽度不匹配,java,android,Java,Android,我是android开发的新手。我正在尝试在溢出的ImageView中设置图像,并尝试根据纵横比使其适合显示(如果宽度更大,则可以通过拖动ImageView来平移图像。高度类似)。问题是,当我向左或向右拖动ImageView时,会看到一个额外的空白位。 . (在Y轴的情况下,会裁剪出一个位)。对于真正宽的图像,空白空间是不可见的,但有部分被裁剪出来。 如果有人能给出一个解决方案,那将非常有帮助 这是我的密码: public class imgDrg extends AppCompatActivit

我是android开发的新手。我正在尝试在溢出的
ImageView
中设置图像,并尝试根据纵横比使其适合显示(如果宽度更大,则可以通过拖动
ImageView
来平移图像。高度类似)。问题是,当我向左或向右拖动
ImageView
时,会看到一个额外的空白位。 . (在Y轴的情况下,会裁剪出一个位)。对于真正宽的图像,空白空间是不可见的,但有部分被裁剪出来。 如果有人能给出一个解决方案,那将非常有帮助

这是我的密码:

public class imgDrg extends AppCompatActivity {

public Bitmap bmp;
public float xCoOrdinate;
public float yCoOrdinate;
public float sWidth;
public float sHeight;
public float finalWidth;
public float finalHeight;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_img_drg);
    Display display = getWindowManager().getDefaultDisplay();
    final Point size = new Point();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        display.getRealSize(size);
    }else {
        display.getSize(size);
    }

    sWidth = size.x;
    sHeight = size.y;

    ImageView imageView = (ImageView)findViewById(R.id.imgvw2);
    Bundle b = getIntent().getExtras();
    String uri_Str= b.getString("image");
    Uri filename = Uri.parse(uri_Str);

    try {
        bmp = MediaStore.Images.Media.getBitmap(this.getContentResolver(), filename);
    } catch (IOException e) {
        e.printStackTrace();
    }

    final float imgwidth = bmp.getWidth();
        final float imgheight = bmp.getHeight();

        final float aspRatioScreen = sHeight/sWidth;
        final float aspRatioImg = (imgheight)/(imgwidth);

        if (aspRatioImg>aspRatioScreen){
            finalWidth = sWidth;
            finalHeight = (sWidth*aspRatioImg);
        }else {
            finalHeight = sHeight;
            finalWidth = (sHeight/aspRatioImg);
        }

        imageView.setImageBitmap(bmp);
        imageView.getLayoutParams().height = (int) finalHeight;
        imageView.getLayoutParams().width = (int) finalWidth;
        imageView.requestLayout();

    if (imageView != null) {
        imageView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent event) {
                switch (event.getActionMasked()) {
                    case MotionEvent.ACTION_DOWN:
                        xCoOrdinate = view.getX() - event.getRawX();
                        yCoOrdinate = view.getY() - event.getRawY();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        float newX = event.getRawX() + xCoOrdinate;
                        float newY = event.getRawY() + yCoOrdinate;

                        if (aspRatioImg < aspRatioScreen) {
                            if (newX >= ((finalWidth-sWidth)/2)) {
                                newX = (finalWidth-sWidth)/2;
                            }
                            if (newX <= ((sWidth-finalWidth)/2)) {
                                newX = (sWidth-finalWidth)/2;
                            }
                            newY = 0;
                            view.animate().x(newX).y(newY).setDuration(0).start();
                        }else {
                            if (newY >= ((finalHeight-sHeight)/2)) {
                                newY = (finalHeight-sHeight)/2;
                            }
                            if (newY <= ((sHeight-finalHeight)/2)) {
                                newY = (sHeight-finalHeight)/2;
                            }
                            newX = 0;
                            view.animate().x(newX).y(newY).setDuration(0).start();
                        }
                        break;
                    default:
                        return false;
                }
                return true;
            }
        });
    }
   }
}
公共类imgDrg扩展了AppCompative活动{
公共位图;
公共交通协调;
公共关系协调;
公共浮动开关;
公众浮标;
公开发行最终宽度;
公开上市融资;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u img\u drg);
Display Display=getWindowManager().getDefaultDisplay();
最终点大小=新点();
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.JELLY\u BEAN\u MR1){
display.getRealSize(大小);
}否则{
display.getSize(size);
}
sWidth=尺寸x;
sHeight=大小.y;
ImageView ImageView=(ImageView)findViewById(R.id.imgvw2);
Bundle b=getIntent().getExtras();
字符串uri_Str=b.getString(“图像”);
Uri文件名=Uri.parse(Uri_Str);
试一试{
bmp=MediaStore.Images.Media.getBitmap(this.getContentResolver(),文件名);
}捕获(IOE异常){
e、 printStackTrace();
}
最终浮点imgwidth=bmp.getWidth();
最终浮点imgheight=bmp.getHeight();
最终浮点数aspRatioScreen=sHeight/sWidth;
最终浮点数aspRatioImg=(imgheight)/(imgwidth);
if(aspRatioImg>aspRatioScreen){
最终宽度=开关宽度;
最终重量=(sWidth*aspRatioImg);
}否则{
最终重量=重量;
最终宽度=(高度/高度);
}
设置图像位图(bmp);
imageView.getLayoutParams().height=(int)最终高度;
imageView.getLayoutParams().width=(int)finalWidth;
requestLayout();
如果(imageView!=null){
imageView.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图、运动事件){
开关(event.getActionMasked()){
case MotionEvent.ACTION\u DOWN:
xCoOrdinate=view.getX()-event.getRawX();
yCoOrdinate=view.getY()-event.getRawY();
打破
case MotionEvent.ACTION\u移动:
float newX=event.getRawX()+xCoOrdinate;
float newY=event.getRawY()+yCoOrdinate;
if(aspRatioImg=((最终宽度)/2)){
newX=(最终宽度)/2;
}
如果(newX=((最终重量)/2)){
newY=(最终重量)/2;
}
如果(新的)