首页 > 解决方案 > imageView 不适合屏幕

问题描述

我是一个全新的 android 应用程序,我的 ImageView nto 显示我的全图时遇到了问题,即使屏幕上还有空间。如果不是这样,我的视图似乎有一些左右填充事件。

行为 :

这是我的原图: 在此处输入图像描述

在这里您可以找到实际显示在我的屏幕上的图片: 在此处输入图像描述

如您所见,我的图片没有完全显示出来。

代码

这是我的 ImageView 代码:

class DrawableImageView extends ImageView implements FlutterView.OnTouchListener
{
   float downx = 0;
   float downy = 0;
   float upx = 0;
   float upy = 0;
   boolean draw = false;

   Canvas canvas;
   Paint paint;
   Matrix matrix;

   public DrawableImageView(Context context)
   {
       super(context);
       setOnTouchListener(this);
   }

   public DrawableImageView(Context context, AttributeSet attrs)
   {
       super(context, attrs);
       setOnTouchListener(this);
   }

   public DrawableImageView(Context context, AttributeSet attrs,
                            int defStyleAttr)
   {
       super(context, attrs, defStyleAttr);
       setOnTouchListener(this);
   }



   public void setNewImage(Bitmap alteredBitmap, Bitmap bmp)
   {
       canvas = new Canvas(alteredBitmap );
       paint = new Paint();
       paint.setColor(Color.RED);
       paint.setStrokeWidth(5);
       matrix = new Matrix();
       canvas.drawBitmap(bmp, matrix, paint);

       setImageBitmap(alteredBitmap);
   }

   public void setDraw(boolean newvalue)  {
       draw = newvalue;
       this.postInvalidate();
   }

   @Override
   public boolean onTouch(View v, MotionEvent event)
   {
       int action = event.getAction();

      if(draw) {
          switch (action)
          {
              case MotionEvent.ACTION_DOWN:
                  downx = getPointerCoords(event)[0];//event.getX();
                  downy = getPointerCoords(event)[1];//event.getY();
                  break;
              case MotionEvent.ACTION_MOVE:
                  upx = getPointerCoords(event)[0];//event.getX();
                  upy = getPointerCoords(event)[1];//event.getY();
                  canvas.drawLine(downx, downy, upx, upy, paint);
                  invalidate();
                  downx = upx;
                  downy = upy;
                  break;
              case MotionEvent.ACTION_UP:
                  upx = getPointerCoords(event)[0];//event.getX();
                  upy = getPointerCoords(event)[1];//event.getY();
                  canvas.drawLine(downx, downy, upx, upy, paint);
                  invalidate();
                  break;
              case MotionEvent.ACTION_CANCEL:
                  break;
              default:
                  break;
          }
      }
       return true;
   }

   final float[] getPointerCoords(MotionEvent e)
   {
       final int index = e.getActionIndex();
       final float[] coords = new float[] { e.getX(index), e.getY(index) };
       Matrix matrix = new Matrix();
       getImageMatrix().invert(matrix);
       matrix.postTranslate(getScrollX(), getScrollY());
       matrix.mapPoints(coords);
       return coords;
   }
}

这是我实际视图的代码:

public class Markup implements PlatformView, MethodChannel.MethodCallHandler {
    private MethodChannel methodChannel;
    DrawableImageView choosenImageView;
    Bitmap alteredBitmap;

    private Bitmap bitmap;


    Markup(final Context context, int id, Object args, BinaryMessenger messenger, final PluginRegistry.Registrar registrar) {
        methodChannel = new MethodChannel(messenger, "plugins.smartapps.flutter_markup/markup_" + id);
        methodChannel.setMethodCallHandler(this);

        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
        int width = metrics.widthPixels;
        int height = metrics.heightPixels;

        bitmap = BitmapFactory.decodeFile((String) args);
        bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
        choosenImageView = new DrawableImageView(context);
        choosenImageView.setMaxWidth(width);
        choosenImageView.setMaxHeight(height);
        choosenImageView.setAdjustViewBounds(true);
        choosenImageView.setScaleType(ImageView.ScaleType.FIT_CENTER);


        //scaleBitmap(bitmap);
        alteredBitmap = Bitmap.createBitmap(bitmap.getHeight(), bitmap.getWidth(), bitmap.getConfig());
        choosenImageView.setNewImage(alteredBitmap, bitmap);
    }


    @Override
    public View getView() {
        return choosenImageView;
    }


    @Override
    public void dispose() {
    }

}



我知道我的帖子很长,但有人知道为什么会这样吗?

谢谢 !

标签: javaandroidimageview

解决方案


试试这个:

<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitXY" or  android:scaleType="centerCrop" //add this property 
/>

推荐阅读