脚本宝典收集整理的这篇文章主要介绍了Android实战开发——引导页面(VeiwPager)篇,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
提示F1a;本篇文章不过多讲解Android的一些基础知识,只讲解实现过程与思路,后续将会通过链接的方式去陆续补充完整。敬请期待……
//布局
PRivate View[] views;
private final int[] viewsId = {
R.layout.layout_guide01,
R.layout.layout_guide02,
R.layout.layout_guide03
};
//图片
private ImageView[] imageViews;
private final int[] imageViewsId = {
R.id.imageView,
R.id.imageView2,
R.id.imageView3
};
//圆点
private View[] circleViews;
private final int[] circleViewsId = {
R.id.view,
R.id.view2,
R.id.view3
};
layoutInflater = getLayoutInflater();
listView = new ArrayList<>();
viewpager = findViewById(R.id.viewPager);
views = new View[viewsId.length];
circleViews = new View[circleViewsId.length];
imageViews = new ImageView[imageViewsId.length];
for(int i = 0;i<3;i++){
//布局初始化
views[i] = layoutInflater.inflate(viewsId[i],null,false);
//圆点初始化
circleViews[i] = findViewById(circleViewsId[i]);
//布局对应控件初始化
imageViews[i] = views[i].findViewById(imageViewsId[i]);
//创建视图集
listView.add(views[i]);
}
注:这里我们使用LayoutInferlater.inferlater方法(传入layout和null参数即 可)动态加载布局,也就是初始化,使用前需要实例化LayoutInferlate对象。 实例化List调用add方法传入View参数来初始化数据
public class ViewPagerAdapter extends PagerAdapter {
//返回列表中视图数量
@override
public int getCount() {
return listView.size();
}
//为翻页控件添加视图
@NonNull
@Override
public Object instantiateitem(@NonNull ViewGroup container, int position) {
container.addView(listView.get(position));
return listView.get(position);
}
//移除翻页控件的视图
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(listView.get(position));
}
//判断视图是否属于对象
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
}
//添加构造器
public ViewPagerAdapter(List<View> viewList){
this.listView = viewList;
}
//给适配器添加布局集
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(listView);
//给viewpager添加适配器
viewpager.setAdapter(viewPagerAdapter);
viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@SupPressLint("UseCompatLoadingForDrawables")
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
for(int i = 0;i<views.length;i++){
if(position == i){
circleViews[i].setBackground(getDrawable(R.drawable.circle_background_true));
}else{
circleViews[i].setBackground(getDrawable(R.drawable.circle_background_false));
}
}
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollstateChanged(int state) {
}
});
注: 当处于第一张引导页面的时候,此时position的值为0,圆点的状态为选中状态。反之如果不是第一张页面,position的值不为0且圆点为未选中状态。我们使用 if else来进行判断,我们有三个引导页面(即三个圆点),因此我们需要重复三次 操作,我们利用for循环来执行(循环3次)。设置圆点选中和未选中我们调用的是setBackground方法参数为Drawable,因此我么需要调用getDrawable方法然后传入int类型的资源(即R.drawable.XXXX,来引用资源)
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
//获取引导页面json数据
JSONArray jsonArray = null;
String uri = null;
bitmaps = new Bitmap[imageViews.length];
String address = "http://124.93.196.67:8080";
String inface = "/prod-api/api/rotation/list?pageNum=1&pageSize=3";
String JSON = RequestUtil.requestGet(address+inface);
});
thread.start();
//获取我们需要的rows
JSONObject jsonObject = new JSONObject(json);
JSONArray jsonArray = (JSONArray) jsonObject.opt("rows");
for(int i = 0;i<jsonArray.length();i++){
String advImg = jsonArray.get(i).toString();
JSONObject jsonObject1 = new JSONObject(advImg);
uri = jsonObject1.opt("advImg").toString();
String url = address + uri;
bitmaps[i] = RequestUtil.getImageBitmap(url);
}
//切换到主线程设置图片
runOnUiThread(new Runnable() {
@Override
public void run() {
for(int i =0;i<imageViews.length;i++){
imageViews[i].setImageBitmap(bitmaps[i]);
}
}
});
注:关于JSONArray对象数据的读取,和Bitmap位图的设置同样采用数组遍历的方法。这里的网络请求封装和通过url获取图片的Bitmap不做讲解。
//创建弹窗
AlertDialog.Builder builder = new AlertDialog.Builder(GuideActivity.this);
View alertDialogView = layoutInflater.inflate(R.layout.alertdialog,null);
builder.setView(alertDialogView).setTitle("网络设置");
builder.create();
Dialog dialog = builder.show();
//初始化控件
EditText iPEt = alertDialogView.findViewById(R.id.editTextTextPersonName2);
EditText portEt = alertDialogView.findViewById(R.id.editTextTextPersonName3);
Button saveBT = alertDialogView.findViewById(R.id.button5);
Button cancelBt = alertDialogView.findViewById(R.id.button6);
//修改IP地址和端口号
cancelBt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
Toast.makeText(GuideActivity.this,"修改成功!",Toast.LENGTH_SHORT).show();
}
});
//保存网络设置
saveBt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//保存IP和端口号
String ip = ipEt.getText().toString().trim();
String port = portEt.getText().toString().trim();
sharedPreferences02 = getSharedPreferences("socket",MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences02.edit();
editor.putString("ip",ip);
editor.putString("port",port);
editor.apply();
//关闭弹窗
dialog.dismiss();
//提示信息
Toast.makeText(GuideActivity.this,"保存成功!",Toast.LENGTH_SHORT).show();
}
});
注:保存和修改IP和端口号的方法一样(Shared Preferences数据覆盖机制),SharedPreferences的使用需要声明SharedPreferences和SharedPreferences.Editor对象并分别调用getSharedPregerences方法传入String类型的name和MODE_PRIVATE和SharedPreferences.edit方法。最后调用SharedPereferences.Editor的putSting方法以键值对形式存储数据,最终调用Shared Preferences.Editor的apply方法提交保存(commit方法也可,但在一些情况下会出现问题,不建议使用)
以上便是引导页面的设计与制作,猿友们可以根据实际需求和实际情况随机应变。有什么问题欢迎留言,一起学习进步哦~
以上是脚本宝典为你收集整理的Android实战开发——引导页面(VeiwPager)篇全部内容,希望文章能够帮你解决Android实战开发——引导页面(VeiwPager)篇所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。