时间:2022-12-30 00:00
现在很多的app,尤其是电商类的app在添加地址功能里面一般都会使用地址的三级联动,那么它是怎么实现的呢?其实很简单,现在简单的介绍一下使用第三方的依赖来实现三级联动的效果.
1.开始编写
1).在module的build.gradle文件中的dependencies节点里面添加这样一行代码引入依赖
[html] view plain copy
compile "com.bigkoo:pickerview:2.0.8"
2).项目的目录结构
包括assets资产目录,三个类文件,分别是activity的代码逻辑类,省份的实体类以及获取省份信息json字符串的工具类.
3)实体类编写如下:
[java] view plain copy
public class AddressBean {
public String name;
public AddressBean(String name) {
this.name = name;
public String getName() {
return name;
public void setName(String name) {
this.name = name;
public String getPickerViewText() {
//这里是固定写法,依赖库会根据集合内容使用反射显示文本到省份栏的文本框中
return this.name;
@Override
public String toString() {
return "AddressBean{" +
"name="" + name + """ +
4).获取json字符串的工具类代码
[html] view plain copy
* Created by yangtao on 2016/12/11.
* 从资产目录中获取json字符串
public class JsonUtils {
public static String getJsonString(Context context,String name){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
AssetManager am = context.getAssets();
try {
InputStream inputStream = am.open(name);
byte[] buffer = new byte[1024];
int len =0;
while((len = inputStream.read(buffer)) != -1){
baos.write(buffer,0,len);
} catch (IOException e) {
e.printStackTrace();
return baos.toString();
5)MainActivity中的代码实现
[java] view plain copy
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.bigkoo.pickerview.OptionsPickerView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private TextView tv_address;
private ArrayList provinceList = new ArrayList<>();//创建存放省份实体类的集合
private ArrayList cities ;//创建存放城市名称集合
private ArrayList> citiesList= new ArrayList<>();//创建存放城市名称集合的集合
private ArrayList areas ;//创建存放区县名称的集合
private ArrayList> areasList ;//创建存放区县名称集合的集合
private ArrayList>> areasListsList = new ArrayList<>();//创建存放区县集合的集合的集合
private OptionsPickerView mPvOptions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_address = (TextView) findViewById(R.id.tv_address);
//获取json字符串,用来解析以获取集合
String jsonString = JsonUtils.getJsonString(MainActivity.this,
"province_data.json");
//解析json字符串,向各级集合中添加元素
parseJson(jsonString);
mPvOptions = new OptionsPickerView(this);
//设置三级联动的效果
mPvOptions.setPicker(provinceList,citiesList,areasListsList,true);
//设置可以循环滚动,true表示这一栏可以循环,false表示不可以循环
mPvOptions.setCyclic(true,false,false);
//设置默认选中的位置
mPvOptions.setSelectOptions(0,0,0);
mPvOptions.setOnoptionsSelectListener(new OptionsPickerView.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3) {
//返回的分别是三个级别的选中位置
String city = provinceList.get(options1).getPickerViewText();
String address;
// 如果是直辖市或者特别行政区只设置市和区/县
if ("北京市".equals(city) || "上海市".equals(city) || "天津市".equals(city) || "重庆市".equals(city) || "澳门".equals(city) || "香港".equals(city)) {
address = provinceList.get(options1).getPickerViewText()
+ " " + areasListsList.get(options1).get(option2).get(options3);
} else {
address = provinceList.get(options1).getPickerViewText()
+ " " + citiesList.get(options1).get(option2)
+ " " + areasListsList.get(options1).get(option2).get(options3);
tv_address.setText(address);
Toast.makeText(MainActivity.this,"我被点击了",Toast.LENGTH_LONG).show();
//点击文本框的时候,显示地址选择框
tv_address.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mPvOptions.show();
//解析获得的json字符串,放在各个集合中
private void parseJson(String json){
try {
//得到一个数组类型的json对象
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i++) {//对数组进行遍历得到每一个jsonobject对象
JSONObject provinceObject = (JSONObject) jsonArray.get(i);
String provinceName = provinceObject.getString("name");//得到省份的名字
provinceList.add(new AddressBean(provinceName));//向集合里面添加元素
JSONArray cityArray = provinceObject.optJSONArray("city");
cities = new ArrayList<>();//创建存放城市名称集合
areasList = new ArrayList<>();//创建存放区县名称的集合的集合
for (int j = 0; j < cityArray.length(); j++) {//遍历每个省份集合下的城市列表
JSONObject cityObject = (JSONObject) cityArray.get(j);
String cityName = cityObject.getString("name");
cities.add(cityName);//向集合里面添加元素
JSONArray areaArray = cityObject.optJSONArray("area");
areas = new ArrayList<>();//创建存放区县名称的集合
for (int k = 0; k < areaArray.length(); k++) {
String areaName = areaArray.getString(k);
areas.add(areaName);
areasList.add(areas);
citiesList.add(cities);
areasListsList.add(areasList);
} catch (JSONException e) {
e.printStackTrace();
如果是视频宣传片,可以利用视频制作软件来制作。
1.首先,我们开启premiere,将我们需要制作成视频的素材全部导入到premiere的对应项目中,方便我们制作时随时使用。
2.随后,我们就可以使用Photoshop或者其他软件,进行一个封面的制作,毕竟作为宣传视频,封面还是比较重要的,我们可以把宣传内容放置在两边。
3.封面作为视频的第一眼,我们也可以不制作宣传内容,直接表示出主题即可,然后将封面图片导入premiere并添加到视频中。
4.视频主体位置往往是宣传的最佳位置,我们可以直接在左下角或者右下角添加一些水印信息,来进行宣传。
5.如今大家都习惯使用“扫一扫”,因此我们可以方便用户,在视频主题内容上,增加一个持续显示,可以提供观看者扫一扫的图片。
6.最后就是视频的结尾,视频结束之后,往往会停留在结尾较长的时间,在视频结尾的停留画面,我们可以增加一些较为明显的宣传内容。
7.完成视频的制作后,我们就可以点击“文件-导出-媒体”进行导出,注意导出窗口下方会显示文件预计大小,注意进行调整,以免文件过大无法使用。我们所作的每一则广告都是建立品牌长期投资的一部份。
宁波大旗广告传播有限公司是一家迅速崛起的影视广告公司。专业从事企业宣传片、产品介绍片、电视购物片、电视广告片、城市宣传片、公益广告、直销导购片、项目专题片、招生宣传片、旅游风光片、记录片、招商引资宣传片、其他各类影视拍摄制作的专业影视制作公司。下设行政部、市场部、策划部、后期制作部、影视拍摄部、人力资源部等部门以及各分支机构。公司拥有广播级影视非编系统、高清标清摄像机、国家级专业配音人员、大型摇臂、灯光系统、拍摄轨道等影视拍摄制作设备以及制片、导演、策划、后期、摄像等专业人才。
大旗影视始终专心致力于用领先的视觉艺术推动传播效果,提升企业品牌价值。为客户提供真正符合消费者需求,最具有销售力的广告。我们所做的一切都围绕着品牌: 活化品牌、打造品牌、保护品牌,让品牌不断产生利润。我们尊重创意,我们更重视艺术与商业的有机结合;我们打造品牌,我们更深知市场与企业的息息相关;我们凭借实力与经验服务客户,帮助企业品牌享誉国内外。我们凝集业内顶尖的品牌咨询团队、策划创意团队、拍摄团队、特效合成团队、后期剪辑团队,可为客户提供从系统深入的市场调研到影视策略创意,从广告片拍摄到各种类型电视栏目的包装制作,从媒介发布到手续跟进服务,从资讯提供到品牌构筑的专业服务链。
大旗影视与众多知名品牌并肩作战,创造了无数市场奇迹,它们包括:宁波港集团、宁波远东码头、吉德电器、海路电器、史翠英食品、富茂大酒店、乐士电器、舟山移动、鄞州水利局、宁波天宫庄园、宁波海关等企事业单位。
我们时刻准备对我们的客户有求必应,我们提供尽可能最优秀的服务的同时会不断总结、完善和提高!