0

请协助我在 ListView 中实施 MP 折线图;它在回收站视图中效果很好,但是当我添加超过 5 个项目时它会丢失它的大小。由于滚动视图,我使用扩展的 listView 来减少问题,但图表看起来像这样。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_margin="10sp"
    android:orientation="vertical"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:textStyle="bold"
        android:textColor="@color/black"
        android:text="@string/most_active_stocks"/>


    <LinearLayout
        android:visibility="visible"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center"
        android:gravity="center"
        android:layout_margin="10sp">



        <Button
            android:layout_width="wrap_content"
            android:textSize="10sp"
            android:layout_gravity="center"
            android:layout_height="40dp"
            android:layout_margin="5dp"
            android:background="@drawable/virtualtrading_button"
            android:text="Volume"
            android:gravity="center"
            android:textColor="@color/black" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:textSize="10sp"
            android:layout_gravity="center"
            android:layout_margin="5dp"
            android:background="@drawable/virtualtrading_button"
            android:text="%Turnover"
            android:gravity="center"
            android:textColor="@color/black" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:textSize="10sp"
            android:layout_margin="5dp"
            android:layout_gravity="center"
            android:background="@drawable/virtualtrading_button"
            android:text="Range"
            android:gravity="center"
            android:textColor="@color/black" />
    </LinearLayout>




    <RelativeLayout

        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">


        <com.catalyst.maksl.Components.ExpandableHeightListView

            android:id="@+id/moverlist"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:drawSelectorOnTop="false"
            android:fadingEdge="vertical"
            android:divider="@android:color/transparent"
            android:dividerHeight="5dp"
            android:fitsSystemWindows="true"
            android:listSelector="#00000000"
            android:scrollbars="none"
            android:smoothScrollbar="true" />


    </RelativeLayout>
</LinearLayout>

ExpandableListView 类

public class ExpandableHeightListView extends ListView {

boolean expanded = false;

public ExpandableHeightListView(Context context)
{
    super(context);
}

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

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

public boolean isExpanded()
{
    return expanded;
}

@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
    // HACK! TAKE THAT ANDROID!
    if (isExpanded())
    {
        // Calculate entire height by providing a very large height hint.
        // But do not use the highest 2 bits of this integer; those are
        // reserved for the MeasureSpec mode.
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);

        ViewGroup.LayoutParams params = getLayoutParams();
        params.height = getMeasuredHeight();
    }
    else
    {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

public void setExpanded(boolean expanded)
{
    this.expanded = expanded;
}

}

适配器类:

public class MostActiveStocksAdapter extends BaseAdapter {

private static LineDataSet set1;
public static Drawable drawablePositive = ContextCompat.getDrawable(Logs.globalContext, R.drawable.graph_green_bg);
public static Drawable drawable_negative = ContextCompat.getDrawable(Logs.globalContext, R.drawable.graph_bg);
Context context;
private Double changePercentage;
ArrayList<String> arrayList = new ArrayList<String>();
LayoutInflater mInflater = null;
private ViewHolder holder;
public ArrayList<Entry> values;
public LineData data;






public MostActiveStocksAdapter(Context context, ArrayList<String> arrayList) {

    this.context = context;
    this.arrayList = arrayList;
    mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

}


@Override
public int getCount() {
    return arrayList.size();
}

@Override
public Object getItem(int position) {
    return arrayList.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.most_active_stocks_listitem, null);
        holder = new ViewHolder();
        holder.moverSymbolName = (TextView) convertView.findViewById(R.id.moversymbolName);
        holder.moverScripName = (AutoResizeTextView) convertView.findViewById(R.id.moversmainSymbolName);
        holder.moverLastTradePrice = (TextView) convertView.findViewById(R.id.moverslastTradePrice);
        holder.moverchange = (AutoResizeTextView) convertView.findViewById(R.id.moversindexChange);
        holder.moverMarket = (TextView) convertView.findViewById(R.id.moverssymbolMarket);
        holder.sector = convertView.findViewById(R.id.movertextSector);
        holder.nameIcon = convertView.findViewById(R.id.moverNameicon);
        holder.masLineChart = convertView.findViewById(R.id.moversgraph);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    ScripBean scripBean = Logs.allScripBean.get(arrayList.get(position));
    MostActiveStockMarketFeedBean marketFeedBean = Logs.mostActiveStockMarketFeedBeanHashMap.get(arrayList.get(position));


    if (marketFeedBean != null) {

        changePercentage = marketFeedBean.getChange() / (marketFeedBean.getLastTradePrice() - marketFeedBean.getChange()) * 100;

        holder.moverScripName.setText(marketFeedBean.getScrip());
        holder.moverSymbolName.setText(marketFeedBean.getScripName());
        holder.sector.setText(scripBean.getSectorName());
        holder.nameIcon.setText(marketFeedBean.getScrip().substring(0,1));
        holder.moverLastTradePrice.setText(Logs.priceFormat.format(marketFeedBean.getLastTradePrice()).replace("-", ""));

        setData(5,3);
        customiseChart();

        if(marketFeedBean.getChange() != 0.0) {


            if (Logs.priceFormat.format(changePercentage).contains("-")) {

                holder.moverLastTradePrice.setBackground(context.getResources().getDrawable(R.drawable.bg_negativecell));


            }
            else
            {

                holder.moverLastTradePrice.setBackground(context.getResources().getDrawable(R.drawable.bg_positivecell));



            }
            holder.moverchange.setText(marketFeedBean.getChange() + " " + "(" + Logs.priceFormat.format(changePercentage).replace("-", "") + "%)");
        }

        else
        {
            holder.moverchange.setText("(0.00%)");

        }

    }

    else {

        String sm = arrayList.get(position);
        holder.moverScripName.setText(sm.split("\\:", -1)[0]);
        holder.moverMarket.setText(sm.split("\\:", -1)[1]);
        holder.moverSymbolName.setText("");
        holder.moverLastTradePrice.setText("0.00");
        holder.moverchange.setText("0.00");

    }
    return convertView;
}

private void setData(int count, float range) {


    values = new ArrayList<>();

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

        float val = (float) (Math.random() * range) - 30;
        values.add(new Entry(i, val));
    }


    set1 = new LineDataSet(values, "DataSet 1");
    set1.setDrawCircles(false);
    set1.setDrawFilled(true);
    set1.setLineWidth(1f);
    set1.setColor(Color.GREEN);
    set1.setMode(LineDataSet.Mode.CUBIC_BEZIER);
    set1.setDrawFilled(true);
    set1.setFillDrawable(drawablePositive);
    set1.setFillFormatter(new IFillFormatter() {
        @Override
        public float getFillLinePosition(ILineDataSet dataSet, LineDataProvider dataProvider) {
            return holder.masLineChart.getAxisLeft().getAxisMinimum();

        }
    });
    ArrayList<ILineDataSet> dataSets = new ArrayList<>();
    dataSets.add(set1);
    data = new LineData(dataSets);

    holder.masLineChart.setData(data);


}

private void customiseChart()
{

    holder.masLineChart.getDescription().setEnabled(false);
    holder.masLineChart.setDrawGridBackground(false);
    holder.masLineChart.setDragEnabled(false);
    holder.masLineChart.getLegend().setEnabled(false);
    holder.masLineChart.setScaleEnabled(true);
    holder.masLineChart.setScaleYEnabled(false);
    holder.masLineChart.setScaleXEnabled(true);
    holder.masLineChart.setDrawGridBackground(false);
    holder.masLineChart.getXAxis().setEnabled(false);
    holder.masLineChart.getLineData().setDrawValues(false);
    holder.masLineChart.getXAxis().setDrawGridLines(false);
    holder.masLineChart.getXAxis().setDrawAxisLine(false);
    holder.masLineChart.getAxisLeft().setDrawGridLines(false);
    holder.masLineChart.getAxisRight().setDrawGridLines(false);
    holder.masLineChart.getAxisRight().setDrawZeroLine(true);
    holder.masLineChart.getAxisLeft().setDrawZeroLine(true);
    holder.masLineChart.getAxisRight().setDrawLabels(false);
    holder.masLineChart.getAxisLeft().setDrawLabels(false);
    holder.masLineChart.getAxisLeft().setEnabled(false);
    holder.masLineChart.getAxisRight().setEnabled(true);
    holder.masLineChart.getAxisRight().setZeroLineColor(Color.BLACK);
    holder.masLineChart.getAxisRight().setAxisLineColor(Color.BLACK);
    holder.masLineChart.setMaxHighlightDistance(150);
    holder.masLineChart.setViewPortOffsets(0, 0, 0, 0);
    holder.masLineChart.setTouchEnabled(false);
    holder.masLineChart.setPinchZoom(false);
}

private class ViewHolder {
    TextView moverSymbolName;
    TextView moverMarket;
    AutoResizeTextView moverScripName;
    TextView moverLastTradePrice;
    AutoResizeTextView moverchange;
    TextView sector;
    TextView nameIcon;
    LineChart masLineChart;

}

PS:这个 ListView 在片段中。

在此处输入图像描述

4

0 回答 0