java - 在 Google map Activity 中的特定位置显示消息?

标签 java android google-maps

如何在不添加标记的情况下在 Android 上的 Google map Activity 中的特定位置显示消息?我只想在特定坐标处显示一个包含消息的小弹出动画。

是否有任何 GitHub 库可以执行此特定任务?

最佳答案

您可以将任何View 放在MapFragment(或MapView)上,并根据需要使用Animations 对其进行动画处理。 :动画大小,位置,透明度等,使用各种interpolators并通过 AnimatorSet 将多个动画合二为一.要获取特定 LatLng 坐标的 View 屏幕位置,您可以使用 Projection.toScreenLocation()方法。

例如,对于在 map 上带有“弹出”动画的“Hello World”TextView,您可以使用这样的代码:

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="activities.MainActivity">

    <fragment class="com.google.android.gms.maps.SupportMapFragment"
        android:id="@+id/map_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

    <TextView
        android:id="@+id/popup_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:visibility="invisible"
        android:text="Hello World!"/>
</RelativeLayout>

MainActivity.java:

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

    private GoogleMap mGoogleMap;
    private SupportMapFragment mMapSupportedFragment;

    private TextView mPopUpTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mPopUpTextView = (TextView) findViewById(R.id.popup_view);

        mMapSupportedFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map_fragment);
        mMapSupportedFragment.getMapAsync(MainActivity.this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mGoogleMap = googleMap;

        mGoogleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
            @Override
            public void onMapClick(LatLng latLng) {
                // get screen position for latLng
                Projection projection = mGoogleMap.getProjection();
                Point origin = projection.toScreenLocation(latLng);

                // popup TextView
                popUpView(origin, mPopUpTextView, 500);
            }
        });
    }

    public void popUpView(final Point origin, final View view, long duration){
        view.setX(origin.x);
        view.setY(origin.y);

        view.setVisibility(View.VISIBLE);

        ValueAnimator sizeAnimation = ValueAnimator.ofInt(0, view.getMeasuredHeight());
        sizeAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
        sizeAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                int val = (Integer) valueAnimator.getAnimatedValue();
                ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
                layoutParams.height = val;
                view.setLayoutParams(layoutParams);
            }
        });
        sizeAnimation.setDuration(duration);

        ValueAnimator positionAnimation = ValueAnimator.ofInt(0, view.getMeasuredHeight());
        positionAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
        positionAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                int val = (Integer) valueAnimator.getAnimatedValue();
                view.setY(origin.y - val);
            }
        });
        positionAnimation.setDuration(duration);

        AnimatorSet popUpSet = new AnimatorSet();
        popUpSet.play(sizeAnimation).with(positionAnimation);
        popUpSet.start();

    }
}

结果:

Popup message

关于java - 在 Google map Activity 中的特定位置显示消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47502372/

相关文章:

java - RxJava - 获取 2 个组合请求的结果数据列表

java - 如何编译和运行包含 Import with Sublime Text 2 的 Java 程序?

android通知两次启动相同的 Activity

java - 设置缩小的相机预览以获得正确的图像宽高比

angularjs - Angular Google Maps - 自动设置 'center' 和 'zoom' 以适应所有标记

html - 有没有办法将自定义替代文本添加到谷歌地图中的自定义标记以提高 SEO 评级?

java - 为什么我们在 stats1 类中使用这个静态?这是一个静态方法,以便我们可以直接调用它吗?

java - JProfiler - 无法通过隧道分析远程 jboss

java - ViewPager 未从服务器获取图像

android - 如何使用google map API获取附近的位置,如银行、酒店等?