在安卓系统中改变图片形状

10

1
不确定为什么这个问题发布后一分钟内就被投票为+4。可以有一个投票者解释一下这个问题的亮点在哪里吗?无论如何,你已经尝试过什么了吗? - user658042
1
使用此链接,我已成功在画布中缩放图像。请参考:http://code.google.com/p/android-multitouch-controller/source/browse/demo/MTPhotoSortr/src/org/metalev/multitouch/photosortr/PhotoSorterView.java?r=3ef1fdcbebe4f016a03c4d956af4ecbf850a925a - Dhruvil Patel
@xitij 我也在寻找这种问题的解决方法......如果我找到了,我一定会通知你..... - Kumar Vivek Mitra
4个回答

1
如果您提到的“重新调整大小”是指在垂直和水平平面上“拉伸”位图,则只需修改绘制形状(例如椭圆形)的矩形即可。
例如:
这是您原始的椭圆形状:
canvas.drawOval(new Rect(0,0,100,100), bluePaint);

这是同一个椭圆,只是在水平平面上被拉伸(调整大小):

canvas.drawOval(new Rect(0,0,200,100), bluePaint);

希望这能有所帮助。


1

基本上你需要使图片无效,并从头开始在画布上重新绘制 ::

img=(ImageView)findViewById(R.id.yourimageidfromxml);

img.onTouchEvent(MotionEvent me)
{
   int X=me.getX(); 
   int Y=me.getY();
   img.invalidate();
   img.repaint(X,Y);

}

void paint(int X,int Y)
{
  img.setWidth(X);
  img.setHeight(Y);
}

缩放图像将从头开始使用画布重新绘制进行转换


0

通过使用带有scaleType“fitXY”的简单ImageView可以实现图像的调整大小。

您必须自己添加蓝色的调整大小手柄。

使用以下方法可以改变图像的旋转(绿色手柄):

public static Bitmap rotate(Bitmap src, float degree) {
    // create new matrix
    Matrix matrix = new Matrix();
    // setup rotation degree
    matrix.postRotate(degree);

    // return new bitmap rotated using matrix
    return Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);
}

源代码: http://xjaphx.wordpress.com/2011/06/22/image-processing-rotate-image-on-the-fly/

更多Android图像处理示例请参见http://xjaphx.wordpress.com/learning/tutorials/


0

有两个选项,都涉及到自定义视图。第一个是创建一个填充“画布”的自定义视图。您可以将8个蓝色和1个绿色圆圈作为Rect对象在视图中跟踪。覆盖onTouchEvent(MotionEvent),然后检查运动事件是否在任何控件中,并相应地更新它们(我在这里简化了一些事情 :))。从您的onTouchEvent中,您将调用invalidate()。然后,您的onDraw(Canvas)可以处理绘制控件并根据控件自上次调用onDraw以来的更改更新图像。

另一个选项是做类似的事情,但使用仅封装圆圈和控件的视图,这意味着移动视图需要一个容器,该容器将允许视图更改其布局参数。这样做,您的onTouchEvent方法需要使用该布局视图触发无效操作,因为它需要重新计算视图的大小和位置。这肯定会更难,但根据您要实现的内容,使用单个视图中代码维护圆圈的表示可能比使用单个视图中的单个视图更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接