我已经看过如何在Android中绘制一个形状,但我想知道的是当用户触摸形状时如何重新缩放形状。
想象一个正方形进入屏幕角落,所以当你触摸它时,它会一直增长直到适合整个屏幕。我希望通过过渡,动画,而不是瞬间实现这一目标。
知道如何做到这一点,或任何已知的资源?
答案 0 :(得分:1)
Android内置了对Animations的支持。您可以通过搜索Web找到许多示例。 This一个是一个好的开始。
为了使你的形状可以触摸,你可以通过覆盖View类来实现它们(可以找到一个很好的例子here)。然后,您可以使用View.OnTouchListener。
答案 1 :(得分:1)
内置的动画在Android中很不错,但无论如何它们都不是最有效的。如果性能是必须的,我会建议您创建自己的方法。我要做的是创建一个扩展View
的类,并给它一个边界框(Rect / RectF)和一个圆。然后,您可以使用边界框来检测何时触摸圆圈。
public class Circle extends View {
public static final float SCALE_AMOUNT = 1.0f;
public RectF boundingBox;
private Paint paint;
private float circleCenterX, circleCenterY, circleRadius;
private float x, y;
public Circle(Context context) {
super(context);
// Create paint
paint = new Paint();
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
// Set circle start radius
circleRadius = 50.0f;
// Set start x and y (this is the upper left hand corner)
x = 100.0f;
y = 100.0f;
// Create boundingBox
boundingBox = new RectF();
boundingBox.left = x;
boundingBox.top = y;
boundingBox.right = x + (circleRadius*2);
boundingBox.bottom = y + (circleRadius*2);
// Set circleCenterX and circleCenterY (the center of the bounding box and circle)
circleCenterX = x + circleRadius;
circleCenterY = y + circleRadius;
}
public void scale(boolean scaleUp) {
float scaleBy = (scaleUp) ? SCALE_AMOUNT : -SCALE_AMOUNT;
// Update circleRadius
circleRadius += scaleBy;
// Update the bounding box
boundingBox.left = x;
boundingBox.top = y;
boundingBox.right = x + (circleRadius*2);
boundingBox.bottom = y + (circleRadius*2);
// Update the circle center positions
circleCenterX = x + circleRadius;
circleCenterY = y + circleRadius;
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawCircle(circleCenterX, circleCenterY, circleRadius, paint);
}
}
...然后在Activity
班级中覆盖onTouchEvent()
方法并检查您的Circle
是否被触及。
Circle circle = new Circle(this);
@Override
public void onDraw(Canvas canvas) {
circle.onDraw(canvas);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
float x = event.getX();
float y = event.getY();
// Detect if pointer goes down on screen
if(action == MotionEvent.ACTION_DOWN) {
if(circle.boundingBox.contains(x, y) == true) {
// Circle was touched so scale it
circle.scale(true); // true is scale up, false is scale down
}
}
return true;
}
...每次触摸时,这将缩放您的圆/矩形。如果你想让它不断增长,你可以有一个布尔变量,当你触摸形状时它被设置为true,直到你拿起你的手指为止。我没有尝试过这段代码,只是快速输入它所以它可能无法编译,但这将是你最好的选择。在所有形状上添加许多形状并检测触摸非常容易。为每个人添加不同的效果......等等。我不想为你做所有这些,但这应该指向正确的方向。
答案 2 :(得分:1)
也许这个github项目可以帮助你:https://github.com/markushi/android-circlebutton