canvas.drawOval(new Rect(0,0,100,100), bluePaint);
这是同一个椭圆,只是在水平平面上被拉伸(调整大小):
canvas.drawOval(new Rect(0,0,200,100), bluePaint);
希望这能有所帮助。
基本上你需要使图片无效,并从头开始在画布上重新绘制 ::
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);
}
缩放图像将从头开始使用画布重新绘制进行转换
通过使用带有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/。
有两个选项,都涉及到自定义视图。第一个是创建一个填充“画布”的自定义视图。您可以将8个蓝色和1个绿色圆圈作为Rect
对象在视图中跟踪。覆盖onTouchEvent(MotionEvent)
,然后检查运动事件是否在任何控件中,并相应地更新它们(我在这里简化了一些事情 :))。从您的onTouchEvent中,您将调用invalidate()
。然后,您的onDraw(Canvas)
可以处理绘制控件并根据控件自上次调用onDraw以来的更改更新图像。
另一个选项是做类似的事情,但使用仅封装圆圈和控件的视图,这意味着移动视图需要一个容器,该容器将允许视图更改其布局参数。这样做,您的onTouchEvent方法需要使用该布局视图触发无效操作,因为它需要重新计算视图的大小和位置。这肯定会更难,但根据您要实现的内容,使用单个视图中代码维护圆圈的表示可能比使用单个视图中的单个视图更好。