资源下载 - 从此开始!

下载我_精品源码软件教程资源网

您的位置:主页 > 网络编程 > 正文

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

2019-06-02 09:20 来源:互联网 编辑:admin

本文实例为大家分享了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.from(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);
   }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助。

打赏一下,我们会为大家提供更多优质资源!

相关文章,95%的人会看!{有内幕、有真相...}

看过本文的人还看过

关闭

微信扫一扫

站长微信账号