【问题标题】:Draw line (or anything else) in the CustomAdpter item在 CustomAdpter 项目中画线(或其他任何东西)
【发布时间】:2014-11-16 19:11:40
【问题描述】:

我的应用中有自定义适配器,我需要根据一些数字在每个 ListView 项目中绘制简单的线。

我已经阅读了许多相关的教程,但我仍然不知道如何以正确的方式实现它。我是 Android 和 Java 的新手,但我似乎了解 Android 的一切,但绘画/绘图除外。任何人都可以为我提供一些指导来获得它。

编辑:

这是我现在使用的一些代码:

在单项布局(row.xml)中,我有 ImageView:

<ImageView
    android:id="@+id/chart"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

在我的自定义适配器中,我有这个:

public class MyImageView extends ImageView{

    public MyImageView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
        canvas.drawLine(0, 0, 20, 20, p);

    }

}

我遇到的问题是如何将我的自定义视图放入图像视图(或任何其他容器)中。

【问题讨论】:

  • 您能否提供更多详细信息。数字如何确定线条?每个列表视图项之间的线绘制方式是否会根据它是哪个项而改变?
  • 另外,如果你能发布一些你目前正在做的事情的代码,我可以提供更多帮助。
  • 在帖子中添加了一些代码。实际上我有带有数组字段的自定义类,所以理想情况下我想根据这些数字画线。但我需要了解如何在我的视图中绘制(因为我现在不知道)。
  • 您的自定义视图会始终保持相同的大小并且只有不同的行数吗?
  • 假设它是基于少数数字的最简单的图表(我的 Class 数组属性将是坐标)。所以每个列表的大小都是一样的,里面有不同的行。

标签: android android-canvas draw custom-adapter


【解决方案1】:

你可以试试这个

public class MyImageView extends ImageView{

private Paint mPaint;
private float cx, cy;
private int size; 

public MyImageView(Context context) {
    super(context);
    init();
}

private void init() {
  mPaint = new Paint();
  mPaint.setAntiAlias(true);
  mPaint.setColor(Color.BLACK);
  mPaint.setStrokeWidth(20);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.drawLine(0, 0, size, size, mPaint);

}

@Override
protected void onSizeChanged(int w, int h, int oldW, int oldH) {
    super.onSizeChanged(w, h, oldw, oldh);
    cx = w/2;
    cy = h/2;
    ///calculate the size of the view here. 
    size = Math.min(w, h);
}



  @Override
   protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) {
      setMeasuredDimension(size, size);
   }

}

【讨论】:

    【解决方案2】:

    您可以在布局中添加View 以绘制线条并通过适配器更改线条的颜色/宽度。

    <View
        android:id="@+id/chart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    

    在适配器中

    class MyAdapter extends ArrayAdapter<Integer> {
        private Context context;
    
        MyAdapter(Context context, Integer[] numbers) {
            super(context, R.layout.your_layout, numbers);
            this.context = context;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                convertView = LayoutInflater.from(context)
                    .inflate(R.layout.your_layout, parent, false);
                holder = new ViewHolder();
                holder.lineView = convertView.findViewById(R.id.chart);
                convertView.setTag(holder);
            }
            else {
                holder = convertView.getTag();
            }
    
            int number = getItem(position);
    
            // Calculate width based on your number. Must be in px
            ViewGroup.LayoutParams params = holder.lineView.getLayoutParams();
            params.width = calculatedWidth;
    
            // Calculate color based on your number
            int color = Color.rgb(r, g, b);
            holder.lineView.setBackroundColor(color);
        }
    
        private class ViewHolder {
            View lineView;
        }
    }
    

    【讨论】:

    • 我尝试实现这个机器人,现在我收到 NullPointer 错误。而且我仍然不明白在这种情况下绘图是如何工作的,觉得自己像个白痴。
    • @Vla 看来你想画斜线。这种方法不适用于这种情况。试试开发者 Pauls 的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多