Android Google Maps v2上的动画透明圆动画设置不正确
我能够在Android Google Maps v2上制作一个基本圆圈的动画,但我想向前迈出一步。 我希望动画圈与Tinders动画圈相似,这可能吗 例如: 现在,我得到一个烦躁的动画,这是非常不可接受的。这是我的密码:Android Google Maps v2上的动画透明圆动画设置不正确,android,android-animation,google-maps-android-api-2,Android,Android Animation,Google Maps Android Api 2,我能够在Android Google Maps v2上制作一个基本圆圈的动画,但我想向前迈出一步。 我希望动画圈与Tinders动画圈相似,这可能吗 例如: 现在,我得到一个烦躁的动画,这是非常不可接受的。这是我的密码: public void onMapReady(谷歌地图){ 双纬度=33.750587; 双经度=-84.4199173; LatLng LatLng=新LatLng(纬度、经度); 地图移动摄像机(CameraUpdateFactory.newLatLng(latLng))
public void onMapReady(谷歌地图){
双纬度=33.750587;
双经度=-84.4199173;
LatLng LatLng=新LatLng(纬度、经度);
地图移动摄像机(CameraUpdateFactory.newLatLng(latLng));
map.animateCamera(CameraUpdateFactory.zoomTo(13));
addMarker(新的MarkerOptions()
.位置(新车床(纬度、经度))
。名称(“标记”);
最后一个圆圈=mMap.addCircle(新圆圈选项()
.中心(新板条(纬度、经度))
.半径(50).填充颜色(0x5500ff00).笔划宽度(0)
);
ValueAnimator ValueAnimator=新的ValueAnimator();
valueAnimator.setRepeatCount(valueAnimator.INFINITE);
valueAnimator.setRepeatMode(valueAnimator.RESTART);
valueAnimator.setIntValues(01100);
值Animator.setDuration(1000);
valueAnimator.setEvaluator(新的inteEvaluator());
valueAnimator.setInterpolator(新的AccelerateDelateInterpolator());
valueAnimator.addUpdateListener(新的valueAnimator.AnimatorUpdateListener(){
@凌驾
动画更新上的公共无效(ValueAnimator ValueAnimator){
float animatedFraction=valueAnimator.getAnimatedFraction();
Log.e(“,”+动画分数);
圆。设置半径(动画分数*100);
}
});
valueAnimator.start();
显然,如果使用正确,有两个github库可用于在标记上创建此连锁反应:
烦躁不安的动画是一个。要解决这个问题,可以使用a而不是圆圈 下面是一个获得您提到的效果的示例:
private static final int DURATION = 3000;
private void showRipples(LatLng latLng) {
GradientDrawable d = new GradientDrawable();
d.setShape(GradientDrawable.OVAL);
d.setSize(500,500);
d.setColor(0x5500ff00);
d.setStroke(0, Color.TRANSPARENT);
Bitmap bitmap = Bitmap.createBitmap(d.getIntrinsicWidth()
, d.getIntrinsicHeight()
, Bitmap.Config.ARGB_8888);
// Convert the drawable to bitmap
Canvas canvas = new Canvas(bitmap);
d.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
d.draw(canvas);
// Radius of the circle
final int radius = 50;
// Add the circle to the map
final GroundOverlay circle = map.addGroundOverlay(new GroundOverlayOptions()
.position(latLng, 2 * radius).image(BitmapDescriptorFactory.fromBitmap(bitmap)));
// Prep the animator
PropertyValuesHolder radiusHolder = PropertyValuesHolder.ofFloat("radius", 0, radius);
PropertyValuesHolder transparencyHolder = PropertyValuesHolder.ofFloat("transparency", 0, 1);
ValueAnimator valueAnimator = new ValueAnimator();
valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
valueAnimator.setRepeatMode(ValueAnimator.RESTART);
valueAnimator.setValues(radiusHolder, transparencyHolder);
valueAnimator.setDuration(DURATION);
valueAnimator.setEvaluator(new FloatEvaluator());
valueAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float animatedRadius = (float) valueAnimator.getAnimatedValue("radius");
float animatedAlpha = (float) valueAnimator.getAnimatedValue("transparency");
circle.setDimensions(animatedRadius * 2);
circle.setTransparency(animatedAlpha);
}
});
// start the animation
valueAnimator.start();
}
现在来看连锁反应:
showRipples(latLng);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
showRipples(latLng);
}
}, DURATION - 500);
更新:本期Im使用:
只是:
简单的家伙
首先,你需要在类外设置覆盖对象和半径对象
GroundOverlay circle;
int radius = 100000;
然后创建valueanimator对象并启动它
final ValueAnimator valueAnimator = new ValueAnimator();
valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
valueAnimator.setRepeatMode(ValueAnimator.RESTART);
valueAnimator.setIntValues(0, radius);
valueAnimator.setDuration(3000);
valueAnimator.setEvaluator(new IntEvaluator());
valueAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
然后使用以下代码显示animatino
circle = mMap.addGroundOverlay(new GroundOverlayOptions()
.position(marker.getPosition(), 2 * radius).image(BitmapDescriptorFactory.fromBitmap(drawcircle())));
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float animatedFraction = valueAnimator.getAnimatedFraction();
circle.setDimensions(animatedFraction * radius * 2);
}
});
valueAnimator.start();
根据neha小姐的问题 是的,这可以和马克一起使用 只需按照上面的答案进行操作即可 将动画代码写入OnMarkerClick事件 像
你最终是如何将这些库用于谷歌地图标记的?你知道如何将其用于谷歌地图标记吗?@Neeraj:这是可行的,但当我放大地图时,涟漪动画的大小也会增加。你知道如何保持大小不变吗?thanks@Neha由于问题已经解决,因此无需再使用此解决方法。您可以现在可以开始添加
Circle
s,而不会出现闪烁问题。@Neeraj:我尝试过使用Circle,但当我放大和缩小地图时,它会缩小和扩大。我希望大小保持不变same@Neeraj这是我面临的问题@Neha我想你在寻找类似的东西?你可能需要在answ中重新计算呃。
circle = mMap.addGroundOverlay(new GroundOverlayOptions()
.position(marker.getPosition(), 2 * radius).image(BitmapDescriptorFactory.fromBitmap(drawcircle())));
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float animatedFraction = valueAnimator.getAnimatedFraction();
circle.setDimensions(animatedFraction * radius * 2);
}
});
valueAnimator.start();
if(circle!=null)
{
circle.remove();
}
circle = mMap.addGroundOverlay(new GroundOverlayOptions()
.position(marker.getPosition(), 2 * radius).image(BitmapDescriptorFactory.fromBitmap(drawcircle())));
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float animatedFraction = valueAnimator.getAnimatedFraction();
circle.setDimensions(animatedFraction * radius * 2);
}
});
valueAnimator.start();