Невозможно нарисовать линии между двумя списками или списком кнопок по горизонтали - PullRequest
2 голосов
/ 23 января 2020

Я пытаюсь нарисовать линии между двумя столбцами, состоящими из 10 кнопок в каждом столбце, как на рисунке ниже. Я пытался использовать линейный макет.

enter image description here

private void createCHTDesign(int scenarios, int numberOfPlots, ArrayList<Plots> plotsArrayList) {

        headingLayout.clear();
        Log.d(TAG, "scenarios:" + scenarios);
        Log.d(TAG, "headingsize:" + headingLayout.size());

        for (int i = 0; i < scenarios; i++) {

            LinearLayout linearLayout = new LinearLayout(mContext);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            if (i == 0) {
                params.setMargins(0, 0, 0, 0);

            } else {
                params.setMargins(250, 0, 0, 0);
            }

            linearLayout.setOrientation(LinearLayout.VERTICAL);
            linearLayout.setLayoutParams(params);
            mainLayout.addView(linearLayout);
            headingLayout.add(linearLayout);
            Log.d(TAG, "count:" + mainLayout.getChildCount());
        }

        for (int i = 0; i < headingLayout.size(); i++) {
            addButtons(headingLayout.get(i), i, numberOfPlots, plotsArrayList);
        }
    }

    @SuppressLint("ClickableViewAccessibility")
    private void addButtons(LinearLayout layout, int index, int numberOfPlots, ArrayList<Plots> plotsArrayList) {

        TextView textView = new TextView(mContext);
        LinearLayout.LayoutParams tvParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        textView.setLayoutParams(tvParams);
        textView.setText(combinationNames.get(index));
        textView.setTextSize(16);
        layout.addView(textView);


        for (int i = 0; i < numberOfPlots; i++) {

            Button button = new Button(mContext);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(400, 150);
            button.setLayoutParams(params);
            button.setId(View.generateViewId());

            button.setText(plotsArrayList.get(i).getMpValue() + "\n" + plotsArrayList.get(i).getYield());
            button.setGravity(Gravity.CENTER_VERTICAL);
            button.setPadding(15, 0, 0, 0);
            button.setTextColor(Color.parseColor("#FFFFFF"));
            button.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.right2x, 0);
            GradientDrawable gradientDrawable = new GradientDrawable();
            gradientDrawable.setColor(Color.parseColor(colors[i]));
            gradientDrawable.setCornerRadius(10);
            gradientDrawable.setStroke(20, Color.parseColor(colors[i]));

            clickonArrow(button.getText().toString(), button);

            button.setBackground(gradientDrawable);
            layout.addView(button);
        }

    }

XML файл:

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



    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="1"
        android:layout_margin="10dp">

        <androidx.appcompat.widget.AppCompatSpinner
            android:id="@+id/spinner"
            android:layout_width="wrap_content"
            android:layout_weight="0.3"
            android:layout_height="wrap_content"
            android:spinnerMode="dropdown"
            android:gravity="center"
            style="@style/SpinnerTheme"
            />
        <androidx.appcompat.widget.AppCompatSpinner
            android:id="@+id/spinner2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.3"
            android:spinnerMode="dropdown"
            android:gravity="center"
            style="@style/SpinnerTheme"/>


        <androidx.appcompat.widget.AppCompatSpinner
            android:id="@+id/spinner3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.3"
            android:gravity="center"
            android:spinnerMode="dropdown"
            style="@style/SpinnerTheme" />

    </LinearLayout>


    <EditText
        android:id="@+id/searchCht"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawableLeft="@drawable/ic_search"
        android:layout_marginLeft="10dp"
        android:hint="Search CHT"
        android:backgroundTint="@android:color/black"
        android:layout_marginRight="10dp"/>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="15dp"
        android:fillViewport="true"
        android:scrollbars="horizontal">

        <HorizontalScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <LinearLayout
                android:id="@+id/mainLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

              <!--  <com.sma.cht.chtcharacterization.view.MatchTheFollowingAttempted
                    android:id="@+id/match"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:scrollbarThumbHorizontal="@color/colorPrimary"
                    android:scrollbars="horizontal">

                </com.sma.cht.chtcharacterization.view.MatchTheFollowingAttempted>
          -->
            </LinearLayout>

        </HorizontalScrollView>
    </ScrollView>


</LinearLayout>

В настоящее время я получаю кнопки в обоих столбцах, но не могу нарисовать Линии либо вы можете сделать эту кнопку вещи с помощью просмотра списка, а также. не могли бы вы помочь мне с этим. Заранее спасибо.

1 Ответ

0 голосов
/ 23 января 2020

разделите вашу перекрестную линию на две части.

попробуйте следующий код,

MainActivity. java

public class MainActivity extends AppCompatActivity {
RecyclerView recyclerview;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    recyclerview=findViewById(R.id.recyclerview);
    recyclerview.setLayoutManager(new LinearLayoutManager(this));
    recyclerview.setAdapter(new SampleAdapter());
}

}

SampleAdapter . java

public class SampleAdapter extends RecyclerView.Adapter<SampleAdapter.MyViewHolder> {
ArrayList<String> list1;
ArrayList<String> list2;

public SampleAdapter() {
    list1 = new ArrayList<>();
    list2 = new ArrayList<>();
    for (int i = 1; i <= 20; i++) {
        list1.add("Left " + i);
        list2.add("Right " + i);
    }
}
@NonNull
@Override
public SampleAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycle_item, viewGroup, false);
    return new SampleAdapter.MyViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull SampleAdapter.MyViewHolder myViewHolder, int position) {
    myViewHolder.buttonLeft.setText(list1.get(position));
    myViewHolder.buttonRight.setText(list2.get(position));

    //show partA image
    if (position == 8) {
        myViewHolder.imageview1.setVisibility(View.GONE);
        myViewHolder.imageview2.setVisibility(View.VISIBLE);
    }
    //show partB image
    if (position == 9) {
        myViewHolder.imageview1.setVisibility(View.GONE);
        myViewHolder.imageview3.setVisibility(View.VISIBLE);
    }
}

@Override
public int getItemCount() {
    return list1.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
    Button buttonLeft, buttonRight;
    ImageView imageview1, imageview2, imageview3;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
        buttonLeft = itemView.findViewById(R.id.buttonLeft);
        buttonRight = itemView.findViewById(R.id.buttonRight);
        imageview1 = itemView.findViewById(R.id.imageview1);
        imageview2 = itemView.findViewById(R.id.imageview2);
        imageview3 = itemView.findViewById(R.id.imageview3);
    }
}}

recycle_item. xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="5">
    <Button
        android:id="@+id/buttonLeft"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:text="text" />
    <ImageView
        android:id="@+id/imageview1"
        android:layout_width="0dp"
        android:layout_height="30dp"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:background="#B3D4F3"
        android:visibility="visible" />

    <ImageView
        android:id="@+id/imageview2"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_weight="1"
        android:background="@drawable/image_a"          android:visibility="gone" />

    <ImageView
        android:id="@+id/imageview3"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_weight="1"
        android:background="@drawable/image_b  android:visibility="gone" />

   <Button
        android:id="@+id/buttonRight"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:text="text" />
</LinearLayout>

activity_main. xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

image_a.png image_a

image2

image_b.png

image

выход

...