ImageView绘制位图是否水平翻转?

时间:2014-06-13 04:34:04

标签: android bitmap imageview

我有一个ImageView和一个位图。我希望ImageView绘制水平镜像的位图。我正在尝试使用矩阵,如下所示:

ImageView iv = ...;
Matrix matrix = new Matrix();
iv.setScaleType(ScaleType.MATRIX);
matrix.preScale(-1, 1);
iv.setImageMatrix(matrix);

但使用上述功能后,ImageView不会出现。如果我注释掉上面的内容,那就好了。我怎么能这样做?

由于

2 个答案:

答案 0 :(得分:0)

您可能会考虑尝试翻转传递到图像视图中的位图,而不是翻转图像视图本身。这是一个例子:

public class Main extends Activity {
 ImageView imViewAndroid;
 public static final int FLIP_VERTICAL = 1;
 public static final int FLIP_HORIZONTAL = 2;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  imViewAndroid = (ImageView) findViewById(R.id.imViewAndroid);
imViewAndroid.setImageBitmap(flipImage(BitmapFactory.decodeResource(getResources(), R.drawable.car),2));
 }
 public Bitmap flipImage(Bitmap src, int type) {
  // create new matrix for transformation
  Matrix matrix = new Matrix();
  // if vertical
  if(type == FLIP_VERTICAL) {
   // y = y * -1
   matrix.preScale(1.0f, -1.0f);
  }
  // if horizonal
  else if(type == FLIP_HORIZONTAL) {
   // x = x * -1
   matrix.preScale(-1.0f, 1.0f);
   // unknown type
  } else {
   return null;
  }

  // return transformed image
  return Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);
 }
}

答案 1 :(得分:0)

这样做,你需要在翻转后偏移图像的宽度:

ImageView iv = ...;
Matrix matrix = new Matrix();
matrix.preScale(-1, 1);
matrix.postTranslate(iv.getLayoutParams().width, 0);

iv.setScaleType(ScaleType.MATRIX); 
iv.setImageMatrix(matrix);