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