Динамическое добавление кнопок в пользовательский FrameLayout - PullRequest
0 голосов
/ 07 октября 2019

У меня есть следующий XML файл, созданный из пользовательского макета, созданного с помощью кода Java и 3 кнопок внутри линейного макета под ним -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:background="@color/grey_200"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/toolbar" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/grey_200"
        android:gravity="center_vertical"
        android:orientation="vertical"
        tools:layout_height="500dp">

        <com.etiennelawlor.tinderstack.ui.TinderStackLayout
            android:id="@+id/activity_main_tinder_stack_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal"
        android:padding="5dp">

        <Button
            android:layout_width="wrap_content"
            android:id="@+id/activity_main_delete_button"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:background="#ff0000"
            android:tag="1"
            android:text="@string/activity_main_delete" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/activity_main_pass_button"
            android:layout_margin="10dp"
            android:background="#A9A9A9"
            android:tag="2"
            android:text="@string/activity_main_pass" />

        <Button
            android:layout_width="wrap_content"
            android:id="@+id/activity_main_approve_button"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:background="#98FB98"
            android:tag="3"
            android:text="@string/activity_main_approve" />

    </LinearLayout>


</LinearLayout>

ПроблемаЯ смотрю на это выглядит так -

enter image description here

Я хочу, чтобы изображение могло двигаться поверх кнопок при прикосновении к нему, но также, конечно,чтобы кнопки были сенсорными и функциональными.

Вот мой класс TinderStackLayout -

public class TinderStackLayout extends FrameLayout {

  // Constants
  private static final int DURATION = 300;

  // Variable members
  private OnCardSwipedListener onCardSwipedListener;
  private int screenWidth;
  private int yMultiplier;

  //Top card
  private TinderCardView topCardOnStack;

  private Button mDeleteButton, mPassButton, mApproveButton;



  //Constructors
  public TinderStackLayout(Context context) {
    super(context);
    init();
  }

  public TinderStackLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
  }

  public TinderStackLayout(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
  }

  @Override
  public void addView(View child, int index, ViewGroup.LayoutParams params) {
    super.addView(child, index, params);
    if (onCardSwipedListener != null)
      onCardSwipedListener.onNext(getChildCount());
  }


  @Override
  public void removeView(View view) {
    super.removeView(view);
    if (onCardSwipedListener != null)
      onCardSwipedListener.onNext(getChildCount());
  }

  @Override
  public void onDetachedFromWindow() {
    super.onDetachedFromWindow();
  }

  // Helper Methods
  private void init() {
    setClipChildren(false);

    screenWidth = DisplayUtility.getScreenWidth(getContext());
    yMultiplier = DisplayUtility.dp2px(getContext(), 8);

    mDeleteButton = new Button(getContext());
    mPassButton = new Button(getContext());
    mApproveButton = new Button(getContext());


  }

  public void addCard(TinderCardView tinderCardView) {
    View firstCard = getChildAt(0);

    if (firstCard != null && firstCard.equals(tinderCardView)) {
      return;
    }

    if (onCardSwipedListener == null)
      onCardSwipedListener = tinderCardView.getOnCardSwipedListener();

    topCardOnStack = tinderCardView;

    ViewGroup.LayoutParams layoutParams;
    layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

    int childCount = getChildCount();
    addView(tinderCardView, 0, layoutParams);

    float scaleValue = 1 - (childCount / 50.0f);

    tinderCardView.animate()
        .x(0)
        .y(childCount * yMultiplier)
        .scaleX(scaleValue)
        .setInterpolator(new AnticipateOvershootInterpolator())
        .setDuration(DURATION);
  }

  public TinderCardView getTopCardOnStack() {
    return topCardOnStack;
  }
}

Нужно ли добавлять их динамически? или есть более простой способ? И если мне нужно добавить их динамически - я был бы рад получить пример кода, как это сделать.

...