Addition Of Track Tags In Open Event Android App
In the Open Event Android app we only had a list of sessions in the schedule page without knowing which track each session belonged to. There were several iterations of UI design for the same. Taking cues from the Google I/O 17 App we thought that the addition of track tags would be informative to the user. In this blog post I will be talking about how this feature was implemented.
TrackTag Layout in Session
<Button android:layout_width="wrap_content" android:layout_height="@dimen/track_tag_height" android:id="@+id/slot_track" android:textAllCaps="false" android:gravity="center" android:layout_marginTop="@dimen/padding_small" android:paddingLeft="@dimen/padding_small" android:paddingRight="@dimen/padding_small" android:textStyle="bold" android:layout_below="@+id/slot_location" android:ellipsize="marquee" android:maxLines="1" android:background="@drawable/button_ripple" android:textColor="@color/white" android:textSize="@dimen/text_size_small" tools:text="Track" />
The important part here is the track tag was modelled as a <Button/> to give users a touch feedback via a ripple effect.
Tag Implementation in DayScheduleAdapter
All the dynamic colors for the track tags was handled separately in the DayScheduleAdapter.
final Track sessionTrack = currentSession.getTrack(); int storedColor = Color.parseColor(sessionTrack.getColor()); holder.slotTrack.getBackground().setColorFilter(storedColor, PorterDuff.Mode.SRC_ATOP); holder.slotTrack.setText(sessionTrack.getName()); holder.slotTrack.setOnClickListener(v -> { Intent intent = new Intent(context, TrackSessionsActivity.class); intent.putExtra(ConstantStrings.TRACK, sessionTrack.getName()); intent.putExtra(ConstantStrings.TRACK_ID, sessionTrack.getId()); context.startActivity(intent); });
As the colors associated with a track were all stored inside the track model we needed to obtain the track from the currentSession. We could get the storedColor by calling getColor() on the track object associated with the session.
In order to set this color as the background of the button we needed to set a color filter with a PorterDuff Mode called as SRC_ATOP.
The name of the parent class is an homage to the work of Thomas Porter and Tom Duff, presented in their seminal 1984 paper titled “Compositing Digital Images”. In this paper, the authors describe 12 compositing operators that govern how to compute the color resulting of the composition of a source (the graphics object to render) with a destination (the content of the render target).
Ref : https://developer.android.com/reference/android/graphics/PorterDuff.Mode.html
To exactly understand what does the mode SRC_ATOP do we can refer to the image below for understanding. There are several other modes with similar functionality.
SRC IMAGE DEST IMAGE SRC ATOP DEST
Now we also set an onClickListener for the track tag so that it directs us to the tracks Page.
So now we have successfully added track tags to the app.
Resources
- Porter Duff Modes : https://developer.android.com/reference/android/graphics/PorterDuff.Mode.html
You must be logged in to post a comment.