我成功地在画布上的图像中实现了缩放放大/缩小和拖放功能。
现在我想要的是重新调整大小,以下图片链接基于iPhone App
How to change shape of an image using iPhone SDK?
那么如何在Android中实现这种功能呢?
答案 0 :(得分: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);
}
缩放图像将从头开始使用画布上的重绘进行转换
答案 1 :(得分:1)
如果通过重新调整大小,您指的是在垂直和水平平面上“拉伸”位图,那么您只需修改绘制形状(例如椭圆形)的矩形。 / p>
例如:
这是您原来的椭圆形状:
canvas.drawOval(new Rect(0,0,100,100), bluePaint);
这是相同的椭圆形,只是在水平面上拉伸(调整大小):
canvas.drawOval(new Rect(0,0,200,100), bluePaint);
我希望这会有所帮助。
答案 2 :(得分:0)
有两个选项,都涉及自定义视图。第一种是创建一个填充“画布”的自定义视图。您可以在视图中跟踪8个蓝色和1个绿色圆圈作为Rect
个对象。覆盖onTouchEvent(MotionEvent)
然后检查运动事件是否在您的任何控件中并相应地更新它们(我在这里简化了一些事情:))。从onTouchEvent中,您可以调用invalidate()
。然后,您onDraw(Canvas)
可以处理绘制控件并根据自上次调用onDraw后控件的更改方式更新图像。
另一种选择是做类似的事情,但是只有封装圆圈和控件的视图,这意味着移动视图需要一个容器,让视图改变它的布局参数。执行此操作时,onTouchEvent方法需要使用该布局视图触发invalidate,因为它需要重新计算视图的大小和位置。这肯定会更难,但取决于你想要实现的目标,使用单个视图可能比在单个视图中维护代码圈表示更好。
答案 3 :(得分: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/。