Showing
15 changed files
with
254 additions
and
46 deletions
| ... | @@ -6,12 +6,20 @@ import android.os.Bundle; | ... | @@ -6,12 +6,20 @@ import android.os.Bundle; | 
| 6 | import android.util.TypedValue; | 6 | import android.util.TypedValue; | 
| 7 | import android.view.View; | 7 | import android.view.View; | 
| 8 | import android.widget.ImageView; | 8 | import android.widget.ImageView; | 
| 9 | +import android.widget.LinearLayout; | ||
| 9 | import android.widget.TextView; | 10 | import android.widget.TextView; | 
| 10 | 11 | ||
| 12 | +import androidx.annotation.NonNull; | ||
| 11 | import androidx.recyclerview.widget.LinearLayoutManager; | 13 | import androidx.recyclerview.widget.LinearLayoutManager; | 
| 12 | import androidx.recyclerview.widget.RecyclerView; | 14 | import androidx.recyclerview.widget.RecyclerView; | 
| 15 | +import androidx.viewpager2.widget.ViewPager2; | ||
| 16 | + | ||
| 17 | +import java.util.ArrayList; | ||
| 18 | +import java.util.Arrays; | ||
| 19 | +import java.util.List; | ||
| 13 | 20 | ||
| 14 | import ly.warp.sdk.R; | 21 | import ly.warp.sdk.R; | 
| 22 | +import ly.warp.sdk.io.adapters.BannerAdapter; | ||
| 15 | import ly.warp.sdk.io.adapters.OfferAdapter; | 23 | import ly.warp.sdk.io.adapters.OfferAdapter; | 
| 16 | import ly.warp.sdk.io.models.DummyDataProvider; | 24 | import ly.warp.sdk.io.models.DummyDataProvider; | 
| 17 | import ly.warp.sdk.io.models.OfferCategory; | 25 | import ly.warp.sdk.io.models.OfferCategory; | 
| ... | @@ -28,7 +36,10 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe | ... | @@ -28,7 +36,10 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe | 
| 28 | // =========================================================== | 36 | // =========================================================== | 
| 29 | // Fields | 37 | // Fields | 
| 30 | // =========================================================== | 38 | // =========================================================== | 
| 31 | - private ImageView mIvBanner; | 39 | + private ViewPager2 mBannerViewPager; | 
| 40 | + private BannerAdapter mBannerAdapter; | ||
| 41 | + private LinearLayout mDotsContainer; | ||
| 42 | + private List<ImageView> mDots; | ||
| 32 | 43 | ||
| 33 | // Category sections | 44 | // Category sections | 
| 34 | private TextView mTvCategoryTopOffers; | 45 | private TextView mTvCategoryTopOffers; | 
| ... | @@ -95,9 +106,7 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe | ... | @@ -95,9 +106,7 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe | 
| 95 | 106 | ||
| 96 | @Override | 107 | @Override | 
| 97 | public void onClick(View v) { | 108 | public void onClick(View v) { | 
| 98 | - if (v.getId() == R.id.banner_icon) { | 109 | + // No longer needed as banner clicks are handled by the adapter | 
| 99 | - WarplyManagerHelper.openContest(this); | ||
| 100 | - } | ||
| 101 | } | 110 | } | 
| 102 | 111 | ||
| 103 | @Override | 112 | @Override | 
| ... | @@ -117,9 +126,8 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe | ... | @@ -117,9 +126,8 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe | 
| 117 | // =========================================================== | 126 | // =========================================================== | 
| 118 | 127 | ||
| 119 | private void initViews() { | 128 | private void initViews() { | 
| 120 | - // Initialize banner | 129 | + // Initialize banner carousel | 
| 121 | - mIvBanner = findViewById(R.id.banner_icon); | 130 | + setupBannerCarousel(); | 
| 122 | - mIvBanner.setOnClickListener(this); | ||
| 123 | 131 | ||
| 124 | // Initialize Top Offers section | 132 | // Initialize Top Offers section | 
| 125 | mTvCategoryTopOffers = findViewById(R.id.tv_recycler_category1); | 133 | mTvCategoryTopOffers = findViewById(R.id.tv_recycler_category1); | 
| ... | @@ -378,6 +386,89 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe | ... | @@ -378,6 +386,89 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe | 
| 378 | } | 386 | } | 
| 379 | 387 | ||
| 380 | // =========================================================== | 388 | // =========================================================== | 
| 381 | - // Inner and Anonymous Classes | 389 | + // Methods | 
| 382 | // =========================================================== | 390 | // =========================================================== | 
| 391 | + | ||
| 392 | + /** | ||
| 393 | + * Sets up the banner carousel with ViewPager2 and pagination dots | ||
| 394 | + */ | ||
| 395 | + private void setupBannerCarousel() { | ||
| 396 | + mBannerViewPager = findViewById(R.id.banner_viewpager); | ||
| 397 | + mDotsContainer = findViewById(R.id.dots_container); | ||
| 398 | + | ||
| 399 | + // Setup adapter with 5 banner images | ||
| 400 | + List<Integer> bannerImages = getBannerImages(); | ||
| 401 | + mBannerAdapter = new BannerAdapter(this, bannerImages); | ||
| 402 | + mBannerAdapter.setOnBannerClickListener(position -> { | ||
| 403 | + // Handle banner click (same as the original banner click) | ||
| 404 | + WarplyManagerHelper.openContest(this); | ||
| 405 | + }); | ||
| 406 | + | ||
| 407 | + mBannerViewPager.setAdapter(mBannerAdapter); | ||
| 408 | + | ||
| 409 | + // Setup pagination dots | ||
| 410 | + setupPaginationDots(bannerImages.size()); | ||
| 411 | + | ||
| 412 | + // Handle page changes | ||
| 413 | + mBannerViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { | ||
| 414 | + @Override | ||
| 415 | + public void onPageSelected(int position) { | ||
| 416 | + updateDots(position); | ||
| 417 | + } | ||
| 418 | + }); | ||
| 419 | + } | ||
| 420 | + | ||
| 421 | + /** | ||
| 422 | + * Returns a list of banner image resource IDs | ||
| 423 | + */ | ||
| 424 | + private List<Integer> getBannerImages() { | ||
| 425 | + return Arrays.asList( | ||
| 426 | + R.drawable.demo_home_banner1, | ||
| 427 | + R.drawable.demo_home_banner2, | ||
| 428 | + R.drawable.demo_home_banner3, | ||
| 429 | + R.drawable.demo_home_banner4, | ||
| 430 | + R.drawable.demo_home_banner5 | ||
| 431 | + ); | ||
| 432 | + } | ||
| 433 | + | ||
| 434 | + /** | ||
| 435 | + * Sets up the pagination dots | ||
| 436 | + * @param count Number of dots to display | ||
| 437 | + */ | ||
| 438 | + private void setupPaginationDots(int count) { | ||
| 439 | + mDots = new ArrayList<>(); | ||
| 440 | + mDotsContainer.removeAllViews(); | ||
| 441 | + | ||
| 442 | + // Create dots | ||
| 443 | + for (int i = 0; i < count; i++) { | ||
| 444 | + ImageView dot = new ImageView(this); | ||
| 445 | + | ||
| 446 | + // Set dot appearance | ||
| 447 | + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( | ||
| 448 | + LinearLayout.LayoutParams.WRAP_CONTENT, | ||
| 449 | + LinearLayout.LayoutParams.WRAP_CONTENT | ||
| 450 | + ); | ||
| 451 | + | ||
| 452 | + // Add margin between dots | ||
| 453 | + params.setMargins(8, 0, 8, 0); | ||
| 454 | + dot.setLayoutParams(params); | ||
| 455 | + | ||
| 456 | + // Set initial state (first dot active, others inactive) | ||
| 457 | + dot.setImageResource(i == 0 ? R.drawable.dot_active : R.drawable.dot_inactive); | ||
| 458 | + | ||
| 459 | + // Add to container and list | ||
| 460 | + mDotsContainer.addView(dot); | ||
| 461 | + mDots.add(dot); | ||
| 462 | + } | ||
| 463 | + } | ||
| 464 | + | ||
| 465 | + /** | ||
| 466 | + * Updates the dots to reflect the current page | ||
| 467 | + * @param position Current page position | ||
| 468 | + */ | ||
| 469 | + private void updateDots(int position) { | ||
| 470 | + for (int i = 0; i < mDots.size(); i++) { | ||
| 471 | + mDots.get(i).setImageResource(i == position ? R.drawable.dot_active : R.drawable.dot_inactive); | ||
| 472 | + } | ||
| 473 | + } | ||
| 383 | } | 474 | } | ... | ... | 
| ... | @@ -179,7 +179,7 @@ public class SingleCouponActivity extends Activity implements View.OnClickListen | ... | @@ -179,7 +179,7 @@ public class SingleCouponActivity extends Activity implements View.OnClickListen | 
| 179 | // Populate views with offer data | 179 | // Populate views with offer data | 
| 180 | if (mOfferItem != null) { | 180 | if (mOfferItem != null) { | 
| 181 | mTvValue.setText(mOfferItem.getValue()); | 181 | mTvValue.setText(mOfferItem.getValue()); | 
| 182 | - mTvSmallDescription.setText(mOfferItem.getDescription()); | 182 | +// mTvSmallDescription.setText(mOfferItem.getDescription()); | 
| 183 | 183 | ||
| 184 | // Store the full description text | 184 | // Store the full description text | 
| 185 | mFullDescriptionText = mOfferItem.getFullDescription(); | 185 | mFullDescriptionText = mOfferItem.getFullDescription(); | ... | ... | 
| 1 | +package ly.warp.sdk.io.adapters; | ||
| 2 | + | ||
| 3 | +import android.content.Context; | ||
| 4 | +import android.view.LayoutInflater; | ||
| 5 | +import android.view.View; | ||
| 6 | +import android.view.ViewGroup; | ||
| 7 | +import android.widget.ImageView; | ||
| 8 | + | ||
| 9 | +import androidx.annotation.NonNull; | ||
| 10 | +import androidx.recyclerview.widget.RecyclerView; | ||
| 11 | + | ||
| 12 | +import java.util.List; | ||
| 13 | + | ||
| 14 | +import ly.warp.sdk.R; | ||
| 15 | + | ||
| 16 | +public class BannerAdapter extends RecyclerView.Adapter<BannerAdapter.BannerViewHolder> { | ||
| 17 | + | ||
| 18 | + private final Context mContext; | ||
| 19 | + private final List<Integer> mBannerImages; | ||
| 20 | + private OnBannerClickListener mListener; | ||
| 21 | + | ||
| 22 | + public interface OnBannerClickListener { | ||
| 23 | + void onBannerClick(int position); | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + public BannerAdapter(Context context, List<Integer> bannerImages) { | ||
| 27 | + this.mContext = context; | ||
| 28 | + this.mBannerImages = bannerImages; | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + public void setOnBannerClickListener(OnBannerClickListener listener) { | ||
| 32 | + this.mListener = listener; | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + @NonNull | ||
| 36 | + @Override | ||
| 37 | + public BannerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { | ||
| 38 | + View view = LayoutInflater.from(mContext).inflate(R.layout.item_banner, parent, false); | ||
| 39 | + return new BannerViewHolder(view); | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + @Override | ||
| 43 | + public void onBindViewHolder(@NonNull BannerViewHolder holder, int position) { | ||
| 44 | + holder.imageView.setImageResource(mBannerImages.get(position)); | ||
| 45 | + | ||
| 46 | + holder.itemView.setOnClickListener(v -> { | ||
| 47 | + if (mListener != null) { | ||
| 48 | + mListener.onBannerClick(position); | ||
| 49 | + } | ||
| 50 | + }); | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + @Override | ||
| 54 | + public int getItemCount() { | ||
| 55 | + return mBannerImages.size(); | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + static class BannerViewHolder extends RecyclerView.ViewHolder { | ||
| 59 | + ImageView imageView; | ||
| 60 | + | ||
| 61 | + BannerViewHolder(@NonNull View itemView) { | ||
| 62 | + super(itemView); | ||
| 63 | + imageView = itemView.findViewById(R.id.iv_banner); | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | +} | 
 
250 KB
 
229 KB
 
205 KB
 
208 KB
 
214 KB
| 1 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | 1 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | 
| 2 | + xmlns:app="http://schemas.android.com/apk/res-auto" | ||
| 2 | xmlns:tools="http://schemas.android.com/tools" | 3 | xmlns:tools="http://schemas.android.com/tools" | 
| 3 | android:layout_width="match_parent" | 4 | android:layout_width="match_parent" | 
| 4 | android:layout_height="match_parent" | 5 | android:layout_height="match_parent" | 
| ... | @@ -53,12 +54,31 @@ | ... | @@ -53,12 +54,31 @@ | 
| 53 | android:src="@drawable/demo_profile" /> | 54 | android:src="@drawable/demo_profile" /> | 
| 54 | </LinearLayout> | 55 | </LinearLayout> | 
| 55 | 56 | ||
| 56 | - <ImageView | 57 | + <androidx.constraintlayout.widget.ConstraintLayout | 
| 57 | - android:id="@+id/banner_icon" | 58 | + android:layout_width="match_parent" | 
| 59 | + android:layout_height="wrap_content"> | ||
| 60 | + | ||
| 61 | + <androidx.viewpager2.widget.ViewPager2 | ||
| 62 | + android:id="@+id/banner_viewpager" | ||
| 58 | android:layout_width="match_parent" | 63 | android:layout_width="match_parent" | 
| 59 | android:layout_height="320dp" | 64 | android:layout_height="320dp" | 
| 60 | - android:scaleType="fitXY" | 65 | + app:layout_constraintBottom_toBottomOf="parent" | 
| 61 | - android:src="@drawable/demo_home_banner" /> | 66 | + app:layout_constraintEnd_toEndOf="parent" | 
| 67 | + app:layout_constraintStart_toStartOf="parent" | ||
| 68 | + app:layout_constraintTop_toTopOf="parent" /> | ||
| 69 | + | ||
| 70 | + <LinearLayout | ||
| 71 | + android:id="@+id/dots_container" | ||
| 72 | + android:layout_width="match_parent" | ||
| 73 | + android:layout_height="50dp" | ||
| 74 | + android:background="@color/cos_grey_light" | ||
| 75 | + android:gravity="center" | ||
| 76 | + android:orientation="horizontal" | ||
| 77 | + android:padding="4dp" | ||
| 78 | + app:layout_constraintBottom_toBottomOf="parent" | ||
| 79 | + app:layout_constraintEnd_toEndOf="parent" | ||
| 80 | + app:layout_constraintStart_toStartOf="parent" /> | ||
| 81 | + </androidx.constraintlayout.widget.ConstraintLayout> | ||
| 62 | 82 | ||
| 63 | <!-- Top Offers Section --> | 83 | <!-- Top Offers Section --> | 
| 64 | <RelativeLayout | 84 | <RelativeLayout | 
| ... | @@ -71,8 +91,8 @@ | ... | @@ -71,8 +91,8 @@ | 
| 71 | android:layout_width="match_parent" | 91 | android:layout_width="match_parent" | 
| 72 | android:layout_height="wrap_content" | 92 | android:layout_height="wrap_content" | 
| 73 | android:layout_gravity="center" | 93 | android:layout_gravity="center" | 
| 74 | - android:paddingHorizontal="16dp" | 94 | + android:orientation="horizontal" | 
| 75 | - android:orientation="horizontal"> | 95 | + android:paddingHorizontal="16dp"> | 
| 76 | 96 | ||
| 77 | <TextView | 97 | <TextView | 
| 78 | android:id="@+id/tv_recycler_category1" | 98 | android:id="@+id/tv_recycler_category1" | 
| ... | @@ -101,9 +121,9 @@ | ... | @@ -101,9 +121,9 @@ | 
| 101 | android:layout_height="wrap_content" | 121 | android:layout_height="wrap_content" | 
| 102 | android:layout_below="@+id/ll_recycler1" | 122 | android:layout_below="@+id/ll_recycler1" | 
| 103 | android:layout_marginTop="16dp" | 123 | android:layout_marginTop="16dp" | 
| 124 | + android:clipToPadding="false" | ||
| 104 | android:orientation="horizontal" | 125 | android:orientation="horizontal" | 
| 105 | - android:paddingHorizontal="16dp" | 126 | + android:paddingHorizontal="16dp" /> | 
| 106 | - android:clipToPadding="false" /> | ||
| 107 | </RelativeLayout> | 127 | </RelativeLayout> | 
| 108 | 128 | ||
| 109 | <!-- Favorites Section --> | 129 | <!-- Favorites Section --> | 
| ... | @@ -117,8 +137,8 @@ | ... | @@ -117,8 +137,8 @@ | 
| 117 | android:layout_width="match_parent" | 137 | android:layout_width="match_parent" | 
| 118 | android:layout_height="wrap_content" | 138 | android:layout_height="wrap_content" | 
| 119 | android:layout_gravity="center" | 139 | android:layout_gravity="center" | 
| 120 | - android:paddingHorizontal="16dp" | 140 | + android:orientation="horizontal" | 
| 121 | - android:orientation="horizontal"> | 141 | + android:paddingHorizontal="16dp"> | 
| 122 | 142 | ||
| 123 | <TextView | 143 | <TextView | 
| 124 | android:id="@+id/tv_recycler_category2" | 144 | android:id="@+id/tv_recycler_category2" | 
| ... | @@ -147,9 +167,9 @@ | ... | @@ -147,9 +167,9 @@ | 
| 147 | android:layout_height="wrap_content" | 167 | android:layout_height="wrap_content" | 
| 148 | android:layout_below="@+id/ll_recycler2" | 168 | android:layout_below="@+id/ll_recycler2" | 
| 149 | android:layout_marginTop="16dp" | 169 | android:layout_marginTop="16dp" | 
| 170 | + android:clipToPadding="false" | ||
| 150 | android:orientation="horizontal" | 171 | android:orientation="horizontal" | 
| 151 | - android:paddingHorizontal="16dp" | 172 | + android:paddingHorizontal="16dp" /> | 
| 152 | - android:clipToPadding="false" /> | ||
| 153 | </RelativeLayout> | 173 | </RelativeLayout> | 
| 154 | 174 | ||
| 155 | <!-- Viability Section --> | 175 | <!-- Viability Section --> | 
| ... | @@ -163,8 +183,8 @@ | ... | @@ -163,8 +183,8 @@ | 
| 163 | android:layout_width="match_parent" | 183 | android:layout_width="match_parent" | 
| 164 | android:layout_height="wrap_content" | 184 | android:layout_height="wrap_content" | 
| 165 | android:layout_gravity="center" | 185 | android:layout_gravity="center" | 
| 166 | - android:paddingHorizontal="16dp" | 186 | + android:orientation="horizontal" | 
| 167 | - android:orientation="horizontal"> | 187 | + android:paddingHorizontal="16dp"> | 
| 168 | 188 | ||
| 169 | <TextView | 189 | <TextView | 
| 170 | android:id="@+id/tv_recycler_category3" | 190 | android:id="@+id/tv_recycler_category3" | 
| ... | @@ -193,9 +213,9 @@ | ... | @@ -193,9 +213,9 @@ | 
| 193 | android:layout_height="wrap_content" | 213 | android:layout_height="wrap_content" | 
| 194 | android:layout_below="@+id/ll_recycler3" | 214 | android:layout_below="@+id/ll_recycler3" | 
| 195 | android:layout_marginTop="16dp" | 215 | android:layout_marginTop="16dp" | 
| 216 | + android:clipToPadding="false" | ||
| 196 | android:orientation="horizontal" | 217 | android:orientation="horizontal" | 
| 197 | - android:paddingHorizontal="16dp" | 218 | + android:paddingHorizontal="16dp" /> | 
| 198 | - android:clipToPadding="false" /> | ||
| 199 | </RelativeLayout> | 219 | </RelativeLayout> | 
| 200 | 220 | ||
| 201 | <!-- Family Section --> | 221 | <!-- Family Section --> | 
| ... | @@ -209,8 +229,8 @@ | ... | @@ -209,8 +229,8 @@ | 
| 209 | android:layout_width="match_parent" | 229 | android:layout_width="match_parent" | 
| 210 | android:layout_height="wrap_content" | 230 | android:layout_height="wrap_content" | 
| 211 | android:layout_gravity="center" | 231 | android:layout_gravity="center" | 
| 212 | - android:paddingHorizontal="16dp" | 232 | + android:orientation="horizontal" | 
| 213 | - android:orientation="horizontal"> | 233 | + android:paddingHorizontal="16dp"> | 
| 214 | 234 | ||
| 215 | <TextView | 235 | <TextView | 
| 216 | android:id="@+id/tv_recycler_category4" | 236 | android:id="@+id/tv_recycler_category4" | 
| ... | @@ -239,9 +259,9 @@ | ... | @@ -239,9 +259,9 @@ | 
| 239 | android:layout_height="wrap_content" | 259 | android:layout_height="wrap_content" | 
| 240 | android:layout_below="@+id/ll_recycler4" | 260 | android:layout_below="@+id/ll_recycler4" | 
| 241 | android:layout_marginTop="16dp" | 261 | android:layout_marginTop="16dp" | 
| 262 | + android:clipToPadding="false" | ||
| 242 | android:orientation="horizontal" | 263 | android:orientation="horizontal" | 
| 243 | - android:paddingHorizontal="16dp" | 264 | + android:paddingHorizontal="16dp" /> | 
| 244 | - android:clipToPadding="false" /> | ||
| 245 | </RelativeLayout> | 265 | </RelativeLayout> | 
| 246 | 266 | ||
| 247 | <!-- Food and Coffee Section --> | 267 | <!-- Food and Coffee Section --> | 
| ... | @@ -255,8 +275,8 @@ | ... | @@ -255,8 +275,8 @@ | 
| 255 | android:layout_width="match_parent" | 275 | android:layout_width="match_parent" | 
| 256 | android:layout_height="wrap_content" | 276 | android:layout_height="wrap_content" | 
| 257 | android:layout_gravity="center" | 277 | android:layout_gravity="center" | 
| 258 | - android:paddingHorizontal="16dp" | 278 | + android:orientation="horizontal" | 
| 259 | - android:orientation="horizontal"> | 279 | + android:paddingHorizontal="16dp"> | 
| 260 | 280 | ||
| 261 | <TextView | 281 | <TextView | 
| 262 | android:id="@+id/tv_recycler_category5" | 282 | android:id="@+id/tv_recycler_category5" | 
| ... | @@ -285,9 +305,9 @@ | ... | @@ -285,9 +305,9 @@ | 
| 285 | android:layout_height="wrap_content" | 305 | android:layout_height="wrap_content" | 
| 286 | android:layout_below="@+id/ll_recycler5" | 306 | android:layout_below="@+id/ll_recycler5" | 
| 287 | android:layout_marginTop="16dp" | 307 | android:layout_marginTop="16dp" | 
| 308 | + android:clipToPadding="false" | ||
| 288 | android:orientation="horizontal" | 309 | android:orientation="horizontal" | 
| 289 | - android:paddingHorizontal="16dp" | 310 | + android:paddingHorizontal="16dp" /> | 
| 290 | - android:clipToPadding="false" /> | ||
| 291 | </RelativeLayout> | 311 | </RelativeLayout> | 
| 292 | 312 | ||
| 293 | <!-- Travelling Section --> | 313 | <!-- Travelling Section --> | 
| ... | @@ -301,8 +321,8 @@ | ... | @@ -301,8 +321,8 @@ | 
| 301 | android:layout_width="match_parent" | 321 | android:layout_width="match_parent" | 
| 302 | android:layout_height="wrap_content" | 322 | android:layout_height="wrap_content" | 
| 303 | android:layout_gravity="center" | 323 | android:layout_gravity="center" | 
| 304 | - android:paddingHorizontal="16dp" | 324 | + android:orientation="horizontal" | 
| 305 | - android:orientation="horizontal"> | 325 | + android:paddingHorizontal="16dp"> | 
| 306 | 326 | ||
| 307 | <TextView | 327 | <TextView | 
| 308 | android:id="@+id/tv_recycler_category6" | 328 | android:id="@+id/tv_recycler_category6" | 
| ... | @@ -331,9 +351,9 @@ | ... | @@ -331,9 +351,9 @@ | 
| 331 | android:layout_height="wrap_content" | 351 | android:layout_height="wrap_content" | 
| 332 | android:layout_below="@+id/ll_recycler6" | 352 | android:layout_below="@+id/ll_recycler6" | 
| 333 | android:layout_marginTop="16dp" | 353 | android:layout_marginTop="16dp" | 
| 354 | + android:clipToPadding="false" | ||
| 334 | android:orientation="horizontal" | 355 | android:orientation="horizontal" | 
| 335 | - android:paddingHorizontal="16dp" | 356 | + android:paddingHorizontal="16dp" /> | 
| 336 | - android:clipToPadding="false" /> | ||
| 337 | </RelativeLayout> | 357 | </RelativeLayout> | 
| 338 | 358 | ||
| 339 | <!-- Kids Section --> | 359 | <!-- Kids Section --> | 
| ... | @@ -347,8 +367,8 @@ | ... | @@ -347,8 +367,8 @@ | 
| 347 | android:layout_width="match_parent" | 367 | android:layout_width="match_parent" | 
| 348 | android:layout_height="wrap_content" | 368 | android:layout_height="wrap_content" | 
| 349 | android:layout_gravity="center" | 369 | android:layout_gravity="center" | 
| 350 | - android:paddingHorizontal="16dp" | 370 | + android:orientation="horizontal" | 
| 351 | - android:orientation="horizontal"> | 371 | + android:paddingHorizontal="16dp"> | 
| 352 | 372 | ||
| 353 | <TextView | 373 | <TextView | 
| 354 | android:id="@+id/tv_recycler_category7" | 374 | android:id="@+id/tv_recycler_category7" | 
| ... | @@ -377,9 +397,9 @@ | ... | @@ -377,9 +397,9 @@ | 
| 377 | android:layout_height="wrap_content" | 397 | android:layout_height="wrap_content" | 
| 378 | android:layout_below="@+id/ll_recycler7" | 398 | android:layout_below="@+id/ll_recycler7" | 
| 379 | android:layout_marginTop="16dp" | 399 | android:layout_marginTop="16dp" | 
| 400 | + android:clipToPadding="false" | ||
| 380 | android:orientation="horizontal" | 401 | android:orientation="horizontal" | 
| 381 | - android:paddingHorizontal="16dp" | 402 | + android:paddingHorizontal="16dp" /> | 
| 382 | - android:clipToPadding="false" /> | ||
| 383 | </RelativeLayout> | 403 | </RelativeLayout> | 
| 384 | 404 | ||
| 385 | <!-- Purchases Section --> | 405 | <!-- Purchases Section --> | 
| ... | @@ -394,8 +414,8 @@ | ... | @@ -394,8 +414,8 @@ | 
| 394 | android:layout_width="match_parent" | 414 | android:layout_width="match_parent" | 
| 395 | android:layout_height="wrap_content" | 415 | android:layout_height="wrap_content" | 
| 396 | android:layout_gravity="center" | 416 | android:layout_gravity="center" | 
| 397 | - android:paddingHorizontal="16dp" | 417 | + android:orientation="horizontal" | 
| 398 | - android:orientation="horizontal"> | 418 | + android:paddingHorizontal="16dp"> | 
| 399 | 419 | ||
| 400 | <TextView | 420 | <TextView | 
| 401 | android:id="@+id/tv_recycler_category8" | 421 | android:id="@+id/tv_recycler_category8" | 
| ... | @@ -424,9 +444,9 @@ | ... | @@ -424,9 +444,9 @@ | 
| 424 | android:layout_height="wrap_content" | 444 | android:layout_height="wrap_content" | 
| 425 | android:layout_below="@+id/ll_recycler8" | 445 | android:layout_below="@+id/ll_recycler8" | 
| 426 | android:layout_marginTop="16dp" | 446 | android:layout_marginTop="16dp" | 
| 447 | + android:clipToPadding="false" | ||
| 427 | android:orientation="horizontal" | 448 | android:orientation="horizontal" | 
| 428 | - android:paddingHorizontal="16dp" | 449 | + android:paddingHorizontal="16dp" /> | 
| 429 | - android:clipToPadding="false" /> | ||
| 430 | </RelativeLayout> | 450 | </RelativeLayout> | 
| 431 | </LinearLayout> | 451 | </LinearLayout> | 
| 432 | </androidx.core.widget.NestedScrollView> | 452 | </androidx.core.widget.NestedScrollView> | ... | ... | 
| ... | @@ -60,7 +60,7 @@ | ... | @@ -60,7 +60,7 @@ | 
| 60 | android:layout_width="match_parent" | 60 | android:layout_width="match_parent" | 
| 61 | android:layout_height="match_parent" | 61 | android:layout_height="match_parent" | 
| 62 | android:scaleType="fitXY" | 62 | android:scaleType="fitXY" | 
| 63 | - android:src="@drawable/demo_home_banner" | 63 | + tools:src="@drawable/demo_home_banner1" | 
| 64 | app:layout_constraintBottom_toBottomOf="parent" | 64 | app:layout_constraintBottom_toBottomOf="parent" | 
| 65 | app:layout_constraintEnd_toEndOf="parent" | 65 | app:layout_constraintEnd_toEndOf="parent" | 
| 66 | app:layout_constraintStart_toStartOf="parent" | 66 | app:layout_constraintStart_toStartOf="parent" | ... | ... | 
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
| 3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | ||
| 4 | + android:layout_width="match_parent" | ||
| 5 | + android:layout_height="match_parent"> | ||
| 6 | + | ||
| 7 | + <ImageView | ||
| 8 | + android:id="@+id/iv_banner" | ||
| 9 | + android:layout_width="match_parent" | ||
| 10 | + android:layout_height="match_parent" | ||
| 11 | + android:scaleType="fitXY" | ||
| 12 | + app:layout_constraintBottom_toBottomOf="parent" | ||
| 13 | + app:layout_constraintEnd_toEndOf="parent" | ||
| 14 | + app:layout_constraintStart_toStartOf="parent" | ||
| 15 | + app:layout_constraintTop_toTopOf="parent" /> | ||
| 16 | + | ||
| 17 | +</androidx.constraintlayout.widget.ConstraintLayout> | 
| ... | @@ -23,6 +23,8 @@ | ... | @@ -23,6 +23,8 @@ | 
| 23 | <color name="black5">#020E1C</color> | 23 | <color name="black5">#020E1C</color> | 
| 24 | <color name="pink2">#F2709D</color> | 24 | <color name="pink2">#F2709D</color> | 
| 25 | <color name="skyblue">#00A3E0</color> | 25 | <color name="skyblue">#00A3E0</color> | 
| 26 | + <color name="grey2">#D8D8D8</color> | ||
| 27 | + <color name="pink3">#EE437E</color> | ||
| 26 | 28 | ||
| 27 | <!-- Used in styles --> | 29 | <!-- Used in styles --> | 
| 28 | <color name="cos_light_blue">#00A5E3</color> | 30 | <color name="cos_light_blue">#00A5E3</color> | ... | ... | 
- 
Please register or login to post a comment
 
