高德地图黑屏问题

高德地图在Fragment中出现黑屏问题解决方案:

1、Fragment切换过程中不使用replace方法,使用show、hide方法即可解决每次切换地图后黑屏问题。但是首次切换至地图时依然会闪一下,请参照步骤2。

2、地图Fragment首次切换时出现闪屏,在Fragment所在Activity中添加getWindow().setFormat(PixelFormat.TRANSLUCENT)解决。

具体参照以下代码:

import android.content.Intent
import android.graphics.Color
import android.graphics.PixelFormat
import android.os.Bundle
import android.support.v4.app.FragmentTransaction
import android.view.View
import com.amap.api.location.AMapLocationClient
import com.amap.api.location.AMapLocationClientOption
import com.android.app.BaseActivity
import com.android.ui.fragment.BoomFragment
import com.android.ui.fragment.HomeFragment
import com.android.ui.fragment.MapsFragment
import com.jaeger.library.StatusBarUtil
import com.sd2w.beilin.app.R
import kotlinx.android.synthetic.main.activity_main.*

/**
 * 应用启动引导页面
 *
 * @author 祁连山
 * @date 2017-09-18
 * @version 1.0
 */

class MainActivity : BaseActivity() {

    lateinit var locationClient: AMapLocationClient
    lateinit var clientOptions: AMapLocationClientOption

    var homeFragment = HomeFragment()
    var boomFragment = BoomFragment()
    var mapsFragment = MapsFragment()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        window.setFormat(PixelFormat.TRANSLUCENT)

        setContentView(R.layout.activity_main)

        StatusBarUtil.setColor(this, Color.parseColor("#318df0"))
        // 默认添加首页
        getTransaction().add(R.id.id_main_holder, homeFragment).commit()
        id_main_group.check(R.id.id_radio_home)
        id_main_group.setOnCheckedChangeListener { group, checkedId ->
            when (checkedId) {
                R.id.id_radio_home -> {
                    id_left_back.visibility = View.VISIBLE
                    id_foo_text.text = "测试标题一"
                    getTransaction().show(homeFragment).hide(boomFragment).hide(mapsFragment).commit()
                }
                R.id.id_radio_boom -> {
                    id_left_back.visibility = View.INVISIBLE
                    id_foo_text.text = "测试标题二"
                    if (!boomFragment.isAdded) {
                        getTransaction().add(R.id.id_main_holder, boomFragment).show(boomFragment).hide(homeFragment).hide(mapsFragment).commit()
                        return@setOnCheckedChangeListener
                    }
                    getTransaction().hide(homeFragment).show(boomFragment).hide(mapsFragment).commit()
                }
                R.id.id_radio_map -> {
                    id_left_back.visibility = View.VISIBLE
                    id_foo_text.text = "测试标题三"
                    if (!mapsFragment.isAdded) {
                        getTransaction().add(R.id.id_main_holder, mapsFragment).show(mapsFragment).hide(homeFragment).hide(boomFragment).commit()
                        return@setOnCheckedChangeListener
                    }
                    getTransaction().hide(homeFragment).hide(boomFragment).show(mapsFragment).commit()
                }
            }
        }
        id_right_img.setOnClickListener {
            var it = Intent(this, ProfileActivity::class.java)
            startActivity(it)
        }
    }

    fun getTransaction(): FragmentTransaction {
        return supportFragmentManager.beginTransaction()
    }
}

 

转载于:https://www.cnblogs.com/magics/articles/7570013.html

### 安卓高德地图黑屏问题解决方案 对于安卓应用中使用高德地图API时遇到的黑屏现象,有多种潜在的原因和对应的解决办法。 #### 地图初始化与生命周期管理不当 在Fragment中集成高德地图时,如果`MapView`对象的生命周期方法未被正确重写,则可能导致地图初次加载正常而后续访问出现黑屏的情况。确保所有必要的生命周期回调函数都已适当地覆盖并实现,比如onCreate()、onStart()、onResume()等,并且这些方法中的操作要严格遵循官方文档指导[^2]。 ```java @Override public void onResume(){ super.onResume(); mapView.onResume(); // 必须调用mMapView.onResume() } @Override protected void onPause(){ super.onPause(); mapView.onPause(); // 必须调用mMapView.onPause() } ``` #### XML布局文件配置失误 检查用于承载地图视图的XML布局定义是否存在问题,确认`MapView`组件已被正确定义并且其属性设置无误。例如: ```xml <com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent"/> ``` 此外,还需注意父容器的尺寸设定以及是否存在其他UI元素遮挡住了地图区域[^3]。 #### 权限声明缺失或错误 应用程序清单文件(`AndroidManifest.xml`)里应包含获取地理位置所需的权限声明;同时也要留意针对不同版本系统的特殊处理方式,如动态请求运行时权限机制下的兼容性考虑[^4]。 ```xml <!-- AndroidManifest.xml --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ... <application> ... </application> ``` #### 加载逻辑优化 考虑到性能因素引起的渲染延迟甚至失败情况,可以尝试调整地图实例化及其关联资源加载的时间点,避免过早创建或者频繁销毁重建造成不必要的负担。某些情况下适当延缓地图控件的初始化直到界面完全呈现之后再执行可能会有所帮助[^5]。 通过上述措施通常能够有效缓解乃至彻底消除大部分因程序设计缺陷所引发的地图显示异常状况。当然实际项目环境中还可能存在更多复杂情形需要具体分析排查才能得出确切结论。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值