day10、11-百度地图、Fresco

百度地图

使用步骤

第一步:登录百度官方网站:http://lbsyun.baidu.com/
第二步:注册-登录,成为开发者。
第三步:创建应用:注意填写的包名要和项目中的工程包名保持一致。
SHA1。参考考链:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-project/ak
第四步:下载 :
http://lbsyun.baidu.com/index.php?title=sdk/download&action#selected=mapsdk_basicmap,mapsdk_searchfunction,mapsdk_lbscloudsearch,mapsdk_calculationtool,mapsdk_radar
在这里插入图片描述
第5步:在AndroidStudio中配置下载的文件放:
参考链接:
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-project/androidstudio
在这里插入图片描述
在app目录下的build.gradle文件中android块中配置sourceSets标签,如果没有使用该标签则新增,详细配置代码如下:

sourceSets {
           main {
               jniLibs.srcDir 'libs'
           }
}

第六步:如果需要做路径规划,POI检索,还需要将原百度Demo中的assets目录拷贝到当前项目中。
Demo中的assets目录如下图。
在这里插入图片描述
拷贝到你项目的assets路径如下图:
在这里插入图片描述
做路程规划和POI检索还需要拷贝下列overlayutil目录下的文件:可以根据需要拷贝单独的文件,例如做步行规划,需要拷贝:WalkingRouteOverlay.java和OvelayManger.java文件。
在这里插入图片描述
第七步:配置清单文件
参考链接:
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-map/showmap
1,添加app key。注意是在清单文件的application 标签下:
红色指示的地方不要动,只需要把我们生成的app key 更改下即可。
在这里插入图片描述
2,在清单文件中添加权限:
3,SDK初始化:记得。需要在清单文件中添加application。
在这里插入图片描述
第八步:显示地图:
参考链接:
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-map/showmap

第九步:定位还需要在清单文件中添加service。

<service android:name="com.baidu.location.f"
    android:enabled="true"
    android:process=":remote"/>

定位参考链接:
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-map/location

第十步:路程规划:
步行路程规划参考链接,其他类似
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/route/walk

第十一步:POI检索
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/search/poi

POI检索

清单文件:
在这里插入图片描述
Application:
在这里插入图片描述
主类Activity:

public class MainActivity extends AppCompatActivity {
    private MapView mMapView = null;
    private PoiSearch mPoiSearch;
    private BaiduMap mBaiduMap;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.bmapView);
        mBaiduMap = mMapView.getMap();
        mPoiSearch = PoiSearch.newInstance();
        mPoiSearch.setOnGetPoiSearchResultListener(listener);

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                mPoiSearch.searchInCity(new PoiCitySearchOption()
                        .city("北京") //必填
                        .keyword("北京西站") //必填
                        .pageNum(10));
            }
        },500);
    }

    OnGetPoiSearchResultListener listener = new OnGetPoiSearchResultListener() {
        @Override
        public void onGetPoiResult(PoiResult poiResult) {
            if (poiResult.error == SearchResult.ERRORNO.NO_ERROR) {
                mBaiduMap.clear();

                //创建PoiOverlay对象
                PoiOverlay poiOverlay = new PoiOverlay(mBaiduMap);

                //设置Poi检索数据
                poiOverlay.setData(poiResult);

                //将poiOverlay添加至地图并缩放至合适级别
                poiOverlay.addToMap();
                poiOverlay.zoomToSpan();
            }
        }
        @Override
        public void onGetPoiDetailResult(PoiDetailSearchResult poiDetailSearchResult) {

        }
        @Override
        public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {

        }
        //废弃
        @Override
        public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {

        }
    };


    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
        mMapView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
        mMapView.onPause();
    }
    @Override
    protected void onDestroy() {
        mPoiSearch.destroy();
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        mMapView.onDestroy();
    }
}

在这里插入图片描述

Fresco

1, Fresco 是是Facebook开发的一个强大的图片加载组件。
和Picasso,Glide比较,它在内存管理方面有很大优势。它的图片是存储在Native层的,可避免OOM。

使用步骤

第一步:添加依赖:
implementation 'com.facebook.fresco:fresco:1.11.0’
第二步:自定义一个Aplication 的子类 例如 DemoApplication//初始化Fresco
Fresco.initialize(this);
第三步:将DemoApplication注册到AndroidManifest.xml中。

第四步:在layout文件声明组件,使用框架中的SimpleDraweeView。
使用fresco的控件,需要在layout文件中添加上:
xmlns:fresco=“http://schemas.android.com/apk/res-auto”
注意: SimpleDraweeView的宽高不能为wrap_content,需要使用match_parent或者一个固定值。
第五步:在Activity中拿到控件。
第六步:产生图片的Uri。图片可以来自网络,asset目录,res目录,sd卡目录等。
例如:Uri uri = Uri.parse(picURL);//产生网络下的资源描述符.
产生sd卡目录下的图片资源描述符:
new Uri.Builder()
.scheme(UriUtil.LOCAL_FILE_SCHEME)
.path("/sdcard/img.jpg")
.build();

第七步:加载图片。
frescoImg.setImageURI(uriAsset);

Freso控件的一些默认的属性:

<com.facebook.drawee.view.SimpleDraweeView
android:layout_width=“20dp”
android:layout_height=“20dp”
fresco:fadeDuration=“300”// 淡出时间,毫秒。
fresco:actualImageScaleType=“focusCrop”// 等同于android:scaleType。
fresco:placeholderImage="@color/wait_color"// 加载中…时显示的图。
fresco:placeholderImageScaleType=“fitCenter”// 加载中…显示图的缩放模式。
fresco:failureImage="@drawable/error"// 加载失败时显示的图。
fresco:failureImageScaleType=“centerInside”// 加载失败时显示图的缩放模式。
fresco:retryImage="@drawable/retrying"// 重试时显示图。
fresco:retryImageScaleType=“centerCrop”// 重试时显示图的缩放模式。
fresco:progressBarImage="@drawable/progress_bar"// 进度条显示图。
fresco:progressBarImageScaleType=“centerInside”// 进度条时显示图的缩放模式。
fresco:progressBarAutoRotateInterval=“1000”// 进度条旋转时间间隔。
fresco:backgroundImage="@color/blue"// 背景图,不会被View遮挡。

fresco:roundAsCircle=“false”// 是否是圆形图片。
fresco:roundedCornerRadius=“1dp”// 四角圆角度数,如果是圆形图片,这个属性被忽略。
fresco:roundTopLeft=“true”// 左上角是否圆角。
fresco:roundTopRight=“false”// 右上角是否圆角。
fresco:roundBottomLeft=“false”// 左下角是否圆角。
fresco:roundBottomRight=“true”// 左下角是否圆角。
fresco:roundingBorderWidth=“2dp”// 描边的宽度。
fresco:roundingBorderColor="@color/border_color" 描边的颜色。
/>

Freso的使用Demo。

布局页面
<com.facebook.drawee.view.SimpleDraweeView
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:id="@+id/sdv"
fresco:placeholderImage="@mipmap/ic_launcher"
fresco:roundedCornerRadius=“20dp”
fresco:roundTopLeft=“true”
fresco:roundTopRight=“true”
fresco:roundBottomLeft=“true”
fresco:roundBottomRight=“true”
fresco:roundWithOverlayColor="@color/colorAccent"
fresco:roundingBorderWidth=“10dp”
fresco:roundingBorderColor="@color/colorPrimary"
/>

//加载图片
String imgPath = “https://img-my.csdn.net/uploads/201407/26/1406383299_1976.jpg”;

Uri uri = Uri.parse(imgPath);
mSdv.setImageURI(uri);

ButterKnife

地址 https://www.cnblogs.com/whoislcj/p/5620128.html
通过注解的方式 , 减少了代码中 findViewById以及setOnClickListener等代码量。
优势:
1,ButterKnife优势相比起xutils来,ButterKnife更受欢迎,在性能方面xutils完全是利用的反射,butterknife是轻量级的反射使用的注解都是编译时注解.
2,强大的View绑定和Click事件处理功能,简化代码,提升开发效率
3,方便的处理Adapter里的ViewHolder绑定问题
4,运行时不会影响APP效率,使用配置方便
代码清晰,可读性强

使用步骤

第一步: 导入依赖

implementation ‘com.jakewharton:butterknife:8.8.1’
annotationProcessor ‘com.jakewharton:butterknife-compiler:8.8.1’

第二步: Activity的 onCreate方法中
unbinder = ButterKnife.bind(this);

onDestroy方法中
unbinder.unbind();

Fragment 在 onCreateView 中
unbinder = ButterKnife.bind(this,rootView);
onDestroy方法中
unbinder.unbind();
注意:Activity和Fragment的区别.
ButterKnife.bind()的调用在Activity中必须在setContentView之后
属性布局不能用private or static 修饰,否则会报错

第三步:使用
注解
– View的注解—
@BindView(布局页面中控件的ID)
TextView tv;

@BindViews({控件的id1,控件的id2})
List data;
—Resource注入 —
@BindBitmap(图片的id)//Bitmap注解使用
Bitmap bitmap;

@BindDrawable(图片的id)//Drawable注解使用
Drawable drawable;
//监听的使用

@OnClick(R.id.but_id)
public void onClick(View view)
{
Toast.makeText(this, “你点击了按钮”, Toast.LENGTH_SHORT).show();
}

@BindString(R.string.msg)//string注解使用
String message;

@BindArray(R.array.names)
String weeks[];//数组

@BindColor(R.color.colorPrimary)
int colorPrimary;//color注解使用

----事件的注解----
@OnClick(R.id.but_id)
public void click(){ }

 可以写一个BaseActivity来调用ButterKnife.bind()方法,子类则不需要再进行bind操作
 在8.4中ButterKnife移除了unBind方法,使用ButterKnife.bind(this)返回一个Unbinder的引用,通过Unbinder的unbind()方法进行解除绑定.

Demo使用的网络资源。
https://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1

代码:

GET:

public class GetRetorfitActivity extends AppCompatActivity {
    private String baseUrl = "http://www.qubaobei.com/";
    private String Url = "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_get_retorfit);

        initRetorfit();

        initMap();

        initURL();
    }

    private void initURL() {
        new Retrofit.Builder().baseUrl(baseUrl).addConverterFactory(GsonConverterFactory.create())
                .build().create(IGetByNetData.class).getDataByurl(Url).enqueue(new Callback<DataJavaBean>() {
            @Override
            public void onResponse(Call<DataJavaBean> call, Response<DataJavaBean> response) {
                Log.d("请求后获取的数据=",response.body().toString());
            }

            @Override
            public void onFailure(Call<DataJavaBean> call, Throwable t) {

            }
        });
    }


    private void initMap() {
        Map<String,String> map = new HashMap<>();

        map.put("stage_id","1");
        map.put("limit","20");
        map.put("page","1");

        new Retrofit.Builder().baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .build()
                .create(IGetByNetData.class)
                .getDateByMap("dish_lite.php",map);
    }

    private void initRetorfit() {
        //获取retorfit
        Retrofit.Builder builder = new Retrofit.Builder();
        //传入baseUrl
        builder.baseUrl(baseUrl);
        //给我们通过网络请求获取的json转化成我们的javabean
        builder.addConverterFactory(GsonConverterFactory.create());

        //获取我们Retorfit的实例
        Retrofit retrofit = builder.build();
        IGetByNetData iGetByNetData = retrofit.create(IGetByNetData.class);

        Call<DataJavaBean> call = iGetByNetData.getData("dish_list.php", "1", "20", "1");
        call.enqueue(new Callback<DataJavaBean>() {
            @Override
            public void onResponse(Call<DataJavaBean> call, Response<DataJavaBean> response) {
                //请求成功后获得数据
                Log.e("请求后获取的数据=",response.body().toString() );
            }

            @Override
            public void onFailure(Call<DataJavaBean> call, Throwable t) {
                //请求失败
            }
        });
    }
}

POST:

public class PostRetorfitActivity extends AppCompatActivity {
    private String beasUrl = "http://www.qubaobei.com/";
    private String Url = "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_post_retorfit);
        //        initRetorfit();

        initBody();
    }

    private void initBody() {
        BobyBean bobyBean = new BobyBean();
        bobyBean.setLimit("20");
        bobyBean.setStage_id("1");
        bobyBean.setPage("1");

        new Retrofit.Builder().baseUrl(beasUrl).addConverterFactory(GsonConverterFactory.create())
                .build().create(IPostByNetData.class).getDataByBody("dish_list.php",bobyBean)
                .enqueue(new Callback<DataJavaBean>() {
                    @Override
                    public void onResponse(Call<DataJavaBean> call, Response<DataJavaBean> response) {
                        Log.d("请求后获取的数据=",response.body().toString());
                    }

                    @Override
                    public void onFailure(Call<DataJavaBean> call, Throwable t) {

                    }
                });

    }

    private void initRetorfit() {
        new Retrofit.Builder().baseUrl(beasUrl).addConverterFactory(GsonConverterFactory.create())
                .build().create(IPostByNetData.class).getData("dish_list.php","1","20","1")
                .enqueue(new Callback<DataJavaBean>() {
                    @Override
                    public void onResponse(Call<DataJavaBean> call, Response<DataJavaBean> response) {
                        Log.d("请求后获取的数据=",response.body().toString());
                    }

                    @Override
                    public void onFailure(Call<DataJavaBean> call, Throwable t) {

                    }
                });
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值