如何为适配器引用的每个绘制对象创建一个新画布?

如何解决如何为适配器引用的每个绘制对象创建一个新画布?

我试图让我的getView方法在我的customView类的canvasAdapter.java类中工作。我试图重新实现从https://stuff.mit.edu/afs/sipb/project/android/docs/guide/topics/ui/layout/gridview.html获得的imageView示例。这是我的canvasAdapter.java类

public class CanvasAdapter extends BaseAdapter {
    public Context getmContext() {
        return mContext;
    }

    private Context mContext;
    
    private AttributeSet attributeSet = new AttributeSet() {...};
    
    private Random randInt = new Random();

    public CanvasAdapter(Context c)
    {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position,View convertView,ViewGroup parent) {
        MyCanvas dummyCanvas = new MyCanvas(mContext,attributeSet);
        if(convertView == null){
            dummyCanvas.clearCanvas();
        }
        for (Integer[] row: mThumbIds) {
            for (Integer ele: row) {
                ele = position;   
            }            
        }

        return dummyCanvas;
    }

    // Keep all canvas objects in array
    public Integer[][] mThumbIds = {   // random values
            { randInt.nextInt(3),randInt.nextInt(3) },{ randInt.nextInt(3),randInt.nextInt(3) }
    };
}

我试图让getView与MyCanvas一起使用:

public class MyCanvas extends View {
    private Paint pixelPaint;

    public Bitmap getMyBitmap() {
        return myBitmap;
    }

    private Paint myBitMapPaint;
    public Bitmap myBitmap;
    private Canvas myCanvas;

    CanvasAdapter canvasAdapter = new CanvasAdapter( getContext() );

    private Random randInt = new Random();

    public MyCanvas(Context context,AttributeSet attrs)
    {
        super(context,attrs);

        myBitMapPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

        pixelPaint = new Paint();
        pixelPaint.setAntiAlias(true);
        pixelPaint.setStyle(Paint.Style.stroke);
        pixelPaint.setColor(pixelPaintColor);
        pixelPaint.setstrokeCap(Paint.Cap.ROUND);
        pixelPaint.setstrokeWidth(42);
    }

    ...

    Integer[][] shapePosition = canvasAdapter.mThumbIds;
    int shapeheight = 1;
    int shapewidth = 1;

    public void drawShapes()  // fill in grid
    {
        for(int row = 0; row < shapePosition.length; row++){
            for(int col = 0; col < shapePosition[row].length; coL++){
                switch(shapePosition[row][col])
                {
                    case 0: pixelPaint.setColor(Color.RED);
                        pixelPaint.setstrokeWidth(60);
                        myCanvas.drawCircle(row*shapeheight + 0.5f,col*shapewidth + 0,0.5f,pixelPaint);
                    case 1: pixelPaint.setColor(Color.GREEN);
                        myCanvas.drawRect(row*shapeheight + 0.1f,col*shapewidth + 0.1f,row*shapeheight + 0.9f,col*shapewidth + 0.9f,pixelPaint);
                    case 2: pixelPaint.setColor(Color.BLUE);
                        myCanvas.drawRect(row*shapeheight + 0.1f,pixelPaint);
                }
            }
        }
    }

    public void clearCanvas() {
        myBitmap = Bitmap.createBitmap(myBitmap.getWidth(),myBitmap.getHeight(),Bitmap.Config.ARGB_8888);
        myCanvas = new Canvas(myBitmap);
    }

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

        int w = myBitmap.getWidth();
        int h = myBitmap.getHeight();

        drawShapes();

        canvas.drawBitmap(myBitmap,myBitMapPaint);
    }
}

我认为是什么使getView内部的MyCanvas逻辑感到困惑。我知道我希望画布绘制的对象位于“视图”中设置的位置。我只是不知道该怎么做。 另外,我在主要活动课上遇到错误

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //GridView gridview = (GridView) findViewById(R.id.gridview);
        //gridview.setAdapter(new CanvasAdapter(this));
        GridView gridView = (GridView)findViewById(R.id.gridview);
        CanvasAdapter canvasAdapteradapter = new CanvasAdapter(this);
        gridView.setAdapter(canvasAdapteradapter);
    }
}

错误: 致命异常:主要 流程:com.example.midterm,PID:17880 java.lang.classCastException:com.example.midterm.CanvasAdapter $ 1无法转换为android.content.res.XmlBlock $ Parser

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?