rlqja1107 / LocationService

Based on Location Service, We would put a electronic kick-board option on Finding Way
0 stars 0 forks source link

"경로찾기" 눌렀을 때의 Activity 구현 #4

Open rlqja1107 opened 4 years ago

rlqja1107 commented 4 years ago

지도에서 경로찾기 버튼을 눌렀을 때의 Activity 구현

화면

firstsecond third
첫 번째 화면과 두 번째 화면에서 출발점과 목적지를 정하고 경로선택의 버튼을 누르면 세 번째 화면으로 넘어가진다.
3 번째 화면으로 넘어갈 때는 출발점의 위도, 경도, 목적지의 위도, 경도의 데이터를 넘긴다.

Method의 이전

이전에는 MainActivity에서 GetDirection함수를 처리했었는데 이제는 세 번째 화면 Activity인 ChooseTransferList에서
받은 위도,경도 데이터로 GetDirection을 실행한다.
GetDirection을 다른 클래스 DirectionFinder에서 구현했었지만, UI와의 상호작용을 비동기에서 처리하기 위해서 GetDirection함수를 ChooseTransferList class의 method로 만들었다. 마찬가지로 GetDirection함수에서 사용되는 decodePolyline 함수도 ChooseTransferList로 이전시켰다.

코드 구현

대중교통의 목록을 보여주기 위해서 RecyclerView를 이용했다. RecyclerView를 이용하여 걸린시간, 그리고 이 프로젝트에서 핵심인 역, 정거장까지 걷는 시간을 보여주고, 버스와 지하철 목록을 보여주기 위해 RecyclerView안에 RecyclerView를 다시 이용했다.(이중 RecyclerView) 아직 UI의 확정이 나지않아 데이터를 화면에 보여주기만 했다. 이후에 깔끔하게 화면에 보여줄 예정이다.
이중 RecyclerView 모두 TransferViewHolder class에 구현했다.

class TransferViewHolder(itemView: View) :RecyclerView.ViewHolder(itemView)
class TransferAdapter(var data:ArrayList<ArrayList<TransferData>>):RecyclerView.Adapter<TransferViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TransferViewHolder {
        return TransferViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.transfer_list_sample,parent,false))
    }
    override fun getItemCount(): Int {
        return data.size
    }
    override fun onBindViewHolder(holder: TransferViewHolder, position: Int) {
        holder.itemView.timeListText.text = ChooseTransferList.duration
        holder.itemView.walkingTime.text ="${data[position][0].duration.toInt()}분"
        holder.itemView.walking_html.text ="${data[position][0].word}"
        Glide.with(ChooseTransferList.context).load(R.drawable.walking2)
            .into(GlideDrawableImageViewTarget(holder.itemView.walkingImage))
        var transferTemp = data[position].filter{
            it.mode=="TRANSIT"
        }
        var manager = LinearLayoutManager(ChooseTransferList.context)
        manager.orientation = LinearLayoutManager.HORIZONTAL
        holder.itemView.innerTransferLayout.layoutManager = manager
        holder.itemView.innerTransferLayout.adapter = InnerTransferRecyclerView(transferTemp)
    }
}

class InnerTransferViewHolder(itemView: View):RecyclerView.ViewHolder(itemView)

//내부 recyclerview
class InnerTransferRecyclerView(var trafficData:List<TransferData>):RecyclerView.Adapter<InnerTransferViewHolder>(){
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): InnerTransferViewHolder {
        var view=LayoutInflater.from(parent.context).inflate(R.layout.inner_transfer_sample,parent,false)
        return InnerTransferViewHolder(view)
    }

    override fun getItemCount(): Int {
        return trafficData.size
    }

    override fun onBindViewHolder(holder: InnerTransferViewHolder, position: Int) {
        if(trafficData[position].transit.line.vehicle.type=="BUS"){
            holder.itemView.traffiImage.setImageResource(R.drawable.bus)
            holder.itemView.trafficStop.text="${trafficData[position].transit.num_stops}정거장"
        }
        else if(trafficData[position].transit.line.vehicle.type=="SUBWAY"){
            holder.itemView.traffiImage.setImageResource(R.drawable.subway2)
            holder.itemView.trafficStop.text="${trafficData[position].transit.num_stops}역"
        }
        holder.itemView.trafficName.text=trafficData[position].transit.line.short_name
        holder.itemView.trafficName.setTextColor(Color.parseColor(trafficData[position].transit.line.color))
        holder.itemView.departureText.text=trafficData[position].transit.departure_stop.name
        holder.itemView.arrivalText.text=trafficData[position].transit.arrival_stop.name

    }

}

Gif를 화면에 나타내는 코드

build.gradle에서 dependencies에 추가

 implementation 'com.github.bumptech.glide:glide:3.7.0'

walkingImage id의 ImageView에 walking2.gif 넣기

import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.GlideDrawableImageViewTarget

  Glide.with(ChooseTransferList.context).load(R.drawable.walking2)
            .into(GlideDrawableImageViewTarget(holder.itemView.walkingImage))