Android自定义View实现公交成轨迹图

发布时间:2019-08-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android自定义View实现公交成轨迹图脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例为大家分享了AndROId自定义View实现公交成轨迹图的具体代码,供大家参考,具体内容如下

Android自定义View实现公交成轨迹图

总体分析下:水平方向recyclewview,ITem包含定位点,站台位置和站台名称。

下面看实现:

1.继承framelayout,实现构造方法:

 public class BusStopPlateView extends FrameLayout { ...  public BusStopPlateView(@NonNull Context context) {  suPEr(context);  initView(context);  }   public BusStopPlateView(@NonNull Context context, @Nullable AttributeSet attrs) {  super(context, attrs);  initView(context);  }   public BusStopPlateView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {  super(context, attrs, defStyleAttr);  initView(context);  }  PRivate void initView(Context context) {  ...  //设置recycleview  LayoutInflater.@R_360_2150@(context).inflate(R.layout.xxx, this, true);  mRecyclerView = (RecyclerView) findViewById(R.id.recycle);  mRecyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));  mBusStopPlateAdapter = new BusStopPlateAdapter(mstationList);  mRecyclerView.setAdapter(mBusStopPlateAdapter);    ... }  ... }

2.recycleview适配器:初始化的时候设置起点设置终点设置车道设置当前车位置的下标

  /**  * 设置车道  */  private void setDriveway(BaseViewHolder helper, BusStopPlatestationInfo item) {  if (helper.getAdapterPosition() <= admincurrentIndex) {   helper.getView(R.id.v_DAOlu).setSelected(true);   helper.getView(R.id.iv_jiantou).setSelected(true);  } else {   helper.getView(R.id.v_daolu).setSelected(false);   helper.getView(R.id.iv_jiantou).setSelected(false);  }  }   /**  * 设置起点  */  private void setStartStation(BaseViewHolder helper, BusStopPlateStationInfo item) {  helper.setVisible(R.id.v_daolu, false)   .setBackgroundRes(R.id.iv_jiantou, R.drawable.bg_busstop_vdaolu_start);  }   /**  * 设置终点  */  private void setEndstation(BaseViewHolder helper, BusStopPlateStationInfo item) {  helper.setBackgroundRes(R.id.iv_jiantou, R.drawable.bg_busstop_vdaolu_end)   .setBackgroundRes(R.id.v_daolu, R.drawable.bg_busstop_vdaolu_end)   .setVisible(R.id.v_zhanwei, true)   .setVisible(R.id.v_daoli_zhanwei, false);  }   /**  * 设置当前所在站点  */  private void setCurrentStation(BaseViewHolder helper, BusStopPlateStationInfo item) {  mCurrentView = helper.getConvertView();  helper.setVisible(R.id.bus_stop_reach, true)   .setVisible(R.id.iv_bus_stop_current, false)   .setVisible(R.id.tv_bus_stop_current_num, false)   .setVisible(R.id.iv_current_point, true)   .setVisible(R.id.iv_admin_index, true)   // 显示占位符,用于显示一的灰色   .setBackgroundRes(R.id.v_daoli_zhanwei, R.drawable.bg_busstop_vdaolu)   .setVisible(R.id.v_daoli_zhanwei, true); //  .setTextColor(R.id.tv_bus_station_name, Color.parseColor("#3D93FD"));   Glide.with(mContext)   .load(R.drawable.bus_icon_fangxiang_current)   .crossFade()   .into((ImageView) helper.getView(R.id.iv_current_point));   List<AliveBusInfo> aliveBusInfos = item.getAliveBusInfos();  if (aliveBusInfos != null && aliveBusInfos.size() != 0) {   AliveBusInfo aliveBusInfo = aliveBusInfos.get(0);   if ("1".equals(aliveBusInfo.getStStatus()) && aliveBusInfo.getStName().equals(item.getStName())) {   helper.setVisible(R.id.iv_admin_index, false)    .setVisible(R.id.iv_bus_stop_current, true)    .setImageResource(R.id.iv_bus_stop_current, R.drawable.bus_stop_current);   }  } else {   Glide.with(mContext)    .load(R.drawable.icon_admin_current_station)    .crossFade()    .into((ImageView) helper.getView(R.id.iv_admin_index));  }   }   /**  * 设置公交所在站点  */  private void setBusStation(BaseViewHolder helper, BusStopPlateStationInfo item) {  List<AliveBusInfo> aliveBusInfos = item.getAliveBusInfos();  if (aliveBusInfos != null && aliveBusInfos.size() != 0) {   AliveBusInfo aliveBusInfo = aliveBusInfos.get(0);   if ("0".equals(aliveBusInfo.getStStatus())) {   // 在车道上   helper.setVisible(R.id.bus_stop_not_to, true)    .setVisible(R.id.bus_stop_reach, false)    .setText(R.id.tv_stop_not_to_num, String.valueOf(aliveBusInfos.size()))    // 显示在过道中的车    .setVisible(R.id.iv_stop_not_to, aliveBusInfos.size() != 0)    // 是否显示数字    .setVisible(R.id.tv_stop_not_to_num, aliveBusInfos.size() > 1);   // 如果已经过站 显示灰色图标   if (aliveBusInfo.getStCount() < 0) {    GlideUtils.loadImageView(mContext, R.drawable.bus_stop_over_station_min, helper.getView(R.id.iv_stop_not_to));   } else {    GlideUtils.loadImageView(mContext, R.drawable.bus_stop_not_to, helper.getView(R.id.iv_stop_not_to));   }    } else if ("1".equals(aliveBusInfo.getStStatus())) {   // 到站   helper.setVisible(R.id.bus_stop_not_to, false)    .setVisible(R.id.bus_stop_reach, true)    .setVisible(R.id.iv_admin_index, true)    .setVisible(R.id.iv_bus_stop_current, false)    .setVisible(R.id.tv_bus_stop_current_num, aliveBusInfo.getStCount() > 1)    .setText(R.id.tv_bus_stop_current_num, String.valueOf(aliveBusInfos.size()));   // 如果已经过站 显示灰色图标   if (aliveBusInfo.getStCount() < 0) {    GlideUtils.loadImageView(mContext, R.drawable.bus_stop_over_station, helper.getView(R.id.iv_admin_index));   } else {    GlideUtils.loadImageView(mContext, R.drawable.bus_stop_not_to, helper.getView(R.id.iv_admin_index));   }   }  } else {   // 隐藏公交车   helper.setVisible(R.id.bus_stop_not_to, false)    .setVisible(R.id.bus_stop_reach, false);  }  }

3.外部activity的点击事件:点击文字的时候将当前位置对象刷新到选择的位置,刷新recycleview

 mBusStopPlateView.setOnBusStopPlateViewItemClick(new BusStopPlateView.onBusStopPlateViewEvent() {   @override   public void onItemClick(BusStopPlateStationInfo station) {   stationId = station.getStId();   stationName = station.getStName();   exportStationInfo(mBusStopPlateView.getStationList());   aliveBusRefresh();    //当上车提醒保存的信息与当前候车站点信息不一致时恢复为上车提醒,   // 并在点击上车提醒是判断是否更新上车提醒的站点   BusRemind remind = SpKeyconfig.getOnRemind();   if (remind != null) {    if (remind.getStationId().equals(stationId) &&     remind.getLineId().equals(MLineId)) {    tvOnRemind.setText("取消提醒");    ivOnRemind.setImageResource(R.drawable.bus_icon_onremind_on);    } else {    tvOnRemind.setText("上车提醒");    ivOnRemind.setImageResource(R.drawable.bus_icon_onremind_off);    }   }   }    @Override   public void onCurrentViewPosition(int x, int y, boolean isVisibility) {   mIvPoint.setTranslationX(x - mIvPoint.getWidth() / 2 + 6);   mIvPoint.setVisibility(isVisibility ? View.VISIBLE : View.INVISIBLE);   }  }
android教程
脚本网站
android studio

脚本宝典总结

以上是脚本宝典为你收集整理的Android自定义View实现公交成轨迹图全部内容,希望文章能够帮你解决Android自定义View实现公交成轨迹图所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。