java - 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() {
}
}
我知道我的帖子很长,但有人知道为什么会这样吗?
谢谢 !
解决方案
试试这个:
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitXY" or android:scaleType="centerCrop" //add this property
/>
推荐阅读
- java - 请解释一下,为什么下面的代码会无限循环
- android - 如何修复“无效的 SplitApkBundle”失败
- c++ - 如何将值插入到特定索引处的 c++ boost::multiindex 集合中,例如 std::list
- jquery - 许多复选框组和“全选”
- mvvm - 使用 MVVM 模式在 Android 中运行后台任务
- javascript - 如何使用 api 设置要翻译的文本值
- javascript - 将多个功能合并为一个
- c# - Microsoft ActiveDirectory PowerShell 模块(Microsoft RSAT 下载)不是线程安全的(“无效枚举上下文”异常)- 补救措施?
- php - 使用 ajax 处理程序的一页上的多个表单不起作用
- windows - 使用 MinGW/Cmake 链接 OpenSSL 失败(TLS_method、`SSL_CTX_ctrl'、.etc..)