Home > Java > Can I use the Canvas element in other functions to display on the view

Can I use the Canvas element in other functions to display on the view

王林
Release: 2024-02-05 22:27:06
forward
965 people have browsed it
Question content

I created a layout that contains some views and also contains a linearlayout for drawing graphics

main_page_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.constraintlayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/bgcolor"
    android:id="@+id/main_page_layout"
    >

....

    <linearlayout
        android:id="@+id/graphicview"
        android:layout_width="match_parent"
        android:layout_height="196dp"
        android:layout_margintop="64dp"
        android:layout_marginleft="0dp"
        android:layout_marginright="0dp"
        android:background="@color/white"
        android:orientation="horizontal"
        app:layout_constraintend_toendof="parent"
        app:layout_constraintleft_toleftof="parent"
        app:layout_constrainttop_tobottomof="@id/menulayout" />

...

</androidx.constraintlayout.widget.constraintlayout>
Copy after login

I'm trying to draw a graph on it using a custom class called graphplotter

graphplotter.java

public class graphplotter extends view {
    private paint paint = null;
    private bitmap bitmap;
    private canvas canvas;

 public graphplotter(context context) {
        super(context);
        this.init();
    }

    /* initiates graph plotter */
    private void init()
    {
        this.paint = new paint();
        this.paint.setcolor(color.blue);
        this.paint.setstrokewidth(5);
        this.paint.setstyle(paint.style.fill_and_stroke);

        // create a bitmap and a canvas associated with the bitmap
        this.bitmap = bitmap.createbitmap(1000, 1000, bitmap.config.argb_8888);
        this.canvas = new canvas(bitmap);

    }
    public void setcolor(int color) {
        this.paint.setcolor(color);
        invalidate(); // force a redraw
    }
    /* draws a line with a custom color */
    public void drawline(float starx, float starty, float stopx, float stopy,int color)
    {
        this.setcolor(color);
        this.canvas.drawline(starx, starty, stopx, stopy, this.paint);
    }

........
Copy after login

This is the activity I want to draw

mainpageactivity.java

public class MainPageActivity extends AppCompatActivity {
        private ConnectionHelper connectionHelper = null;
        private SQLQuery sqlQuery = null;
        private Person person = null;
        private TextView txtID = null;
        private RecyclerView recyclerView = null;
        private final ProductAdapter productAdapter = null;
        private AsyncTaskRunner asyncTaskRunner = null;
        private ViewHolder viewHolder = null;
        private Spinner graphicTypeSpinner = null;
        private Button menuButton = null;
        private ConstraintLayout menuView  = null;
        private List<Product> productList  = null;
        private GraphPlotter graphPlotter = null;



        @Override
        protected void onCreate(Bundle savedInstanceState){

            super.onCreate(savedInstanceState); // necessary for onCreate function
            setContentView(R.layout.main_page_layout); // R = resource , R.layout => layouts directory

            init();


            LinearLayout graphicView = (LinearLayout) findViewById(R.id.graphicView);
            graphPlotter = new GraphPlotter(this);

            graphPlotter.drawAxisX(159,159,259, Color.BLUE);

            graphicView.addView(graphPlotter);

}

           ...........
...................
Copy after login

But I can't see any lines or axes.

I want to draw a graphic for a product using canvas but I can't see any results, what's wrong with my class or code


Correct answer


will draw the behavior Put it in the ondraw() function

@Override
protected void onDraw(Canvas canvas) {
    drawLine(...);
    drawAxisX();
}
Copy after login

The above is the detailed content of Can I use the Canvas element in other functions to display on the view. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template