android中在代码中动态布按钮和画板局并绘制曲线

2023-05-16

绘图面板基类继承View
package com.mytest.myapplication.Utility;

import android.graphics.Color;
import android.util.Log;
import android.view.View;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.Point;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.WindowManager;
import android.widget.Button;

import java.util.ArrayList;

//自定义简单曲线图
public class MyGraphicView extends View{

    public Context _Context;
    private Paint _mPaint;
    private Paint _mPaint2;
    public String _type="0";


   // private Resources _res;
   // private DisplayMetrics _dm;
    /**
     * 曲线上总点数
     */
    private float[] mPoints={0,0,10,10,20,20,30,30,};
    /**
     * 纵坐标值
     */
    private ArrayList<Double> yRawData;
    /**
     * 横坐标值
     */
    private ArrayList<String> xRawDatas;
    public MyGraphicView(Context context)
    {
        this(context, null);
    }
    public MyGraphicView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        this._Context = context;

        initView();
    }
    private void initView()//初始化
    {
        //this._res = _Context.getResources();
        this._mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        this._mPaint2 = new Paint(Paint.ANTI_ALIAS_FLAG);
       // _dm = new DisplayMetrics();
      //  WindowManager wm = (WindowManager) _Context.getSystemService(Context.WINDOW_SERVICE);
       // wm.getDefaultDisplay().getMetrics(_dm);
    }
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh)//尺寸改变事件
    {
          super.onSizeChanged(w,h,oldw,oldh);
    }
    @Override
    protected void onDraw(Canvas canvas)
    {
        _mPaint.setColor(Color.BLUE);//颜色赋值
        _mPaint2.setColor(Color.RED);//颜色赋值

        if(_type=="0") {
            canvas.drawLine(0, 100, getWidth(), getHeight(), _mPaint);

            // super.onDraw(canvas);
        }
        else
        {
            DrawXYAxis( canvas);//画坐标和曲线
           // canvas.drawLines(mPoints, _mPaint);
        }

    }
    public void Redraw(String type)//重绘触发
    {
        _type=type;
        invalidate();//重绘触发事件
    }
    public void DrawXYAxis(Canvas canvas)//画坐标和曲线
    {
        int allWidth=getWidth();//界面宽度
        int allHeight=getHeight();//界面高度
        canvas.drawLine(50,50,(float)(50),(float)(allHeight-50),_mPaint2);//画y轴
        canvas.drawLine((float)(50),(float)(allHeight-50),(float)(allWidth-50),(float)(allHeight-50),_mPaint2);//画x轴


        float[] xPoints=new float[allWidth];
        float[] yPoints=new float[allWidth];
        for(int i=0;i<allWidth;i++)
        {
            xPoints[i]=i;
            yPoints[i]=(float)(Math.random()*400);
        }
        canvas.drawText("测试曲线",(float)(allWidth/2.0),20, _mPaint);//画标题
        for(int i=10;i<allWidth;i++)//画横轴刻度
        {
            if(i%50==0)
            {
                canvas.drawText(String.valueOf(i),i,allHeight-30, _mPaint);
            }
        }
        for(int i=allHeight-10;i>50;i-=50)//画纵轴刻度
        {
          try {
              canvas.drawText(String.valueOf(allHeight-10-i),20,i, _mPaint);
          }
          catch (Exception e)
          {
            Log.i("异常:",e.toString());
          }


        }
        for(int i=0;i<allWidth-2;i++)//画曲线
        {

            canvas.drawLine(xPoints[i]+50,allHeight-210-yPoints[i],xPoints[i+1]+50,allHeight-210-yPoints[i+1], _mPaint);
        }

    }


}

绘制活动页(TableLayout(纵向)好用,LinerLayOut横向)

 

package com.mytest.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TableLayout;

import com.mytest.myapplication.Utility.MyGraphicView;

public class MyDrawActivity extends AppCompatActivity {
    MyGraphicView graphicView;
    public Button button1;
    public Button button2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        DisplayMetrics metric = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metric);
        int width = metric.widthPixels;     // 屏幕宽度(像素)
        int height = metric.heightPixels;   // 屏幕高度(像素)
        float density = metric.density;      // 屏幕密度(0.75 / 1.0 / 1.5)
        int densityDpi = metric.densityDpi;  // 屏幕密度DPI(120 / 160 / 240)
        //final LinearLayout layout = new LinearLayout(this);
        final TableLayout layout=new TableLayout(this);
        graphicView=new MyGraphicView(this,null);
        button1=new Button(this);
        button2=new Button(this);
        button1.setText("按钮1");
        button2.setText("按钮2");
        button1.setWidth(width);
        button2.setWidth(width);
        layout.addView(button1);
        layout.addView(button2);
        layout.addView(graphicView);
        setContentView(layout);
        button1.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {

                graphicView. Redraw("0");//重绘触发
            }
        });
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                graphicView. Redraw("1");//重绘触发
            }
        });
    }
}

调用(主活动页的按钮注册侦听事件调用)

 

Button.OnClickListener listener5 = new Button.OnClickListener() {
    public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this,MyDrawActivity.class);
        startActivity(intent);
        MainActivity.this.finish();


    }
};

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android中在代码中动态布按钮和画板局并绘制曲线 的相关文章

随机推荐

  • SQLiteOpenHelper的简单使用

    由于想学习GreenDao框架 xff0c 但是看了一下有的蒙圈 xff0c 所以先熟悉一下android原生的SQLiteOpenHelper的使用 工具 xff1a SQLite Expert Personal SQLite Exper
  • 安卓案例:利用SQLiteOpenHelper操作数据库及表

    安卓案例 xff1a 利用SQLiteOpenHelper操作数据库及表 一 运行效果 二 涉及知识点 1 利用SQLiteOpenHelper类创建与升级数据库 这个类是一个抽象类 xff0c 我们必须继承该类创建一个子类 xff0c 实
  • delphi SimpleGraph控件的部分注释

    TSimpleGraph是一个delphi下的可视化图形开源控件 xff0c 有很强编辑态和运行态编辑功能 是学习开发DELPHI控件的一个很好的例子 控件本身有很强的扩展性 完全可以自定义绘制各种图形 控件的地址为http www del
  • java获取实体类的属性和值

    package com jackie day11 import java lang reflect Field import java lang reflect InvocationTargetException import java l
  • Android USB 开发详解

    Android USB 开发详解 先附上 Android USB 官方文档 Android通过两种模式支持各种 USB 外设和 Android USB 附件 xff08 实现Android附件协议的硬件 xff09 xff1a USB附件和
  • Android USB串口开发

    因为第一次接触Android下的串口开发 xff0c 在网上找了很多例子都不能满足自己的需要以及不能正常使用 xff0c 于是结合网上的资源以及查阅资料 xff0c 终于完成了关于这个串口的开发 xff0c 在此记录下usb转串口通信开发的
  • Android USB转串口通信开发实例详解

    好久没有写文章了 xff0c 年前公司新开了一个项目 xff0c 是和usb转串口通信相关的 xff0c 需求是用安卓平板通过usb转接后与好几个外设进行通信 xff0c 一直忙到最近 xff0c 才慢慢闲下来 xff0c 趁着这个周末不忙
  • Android USB转串口编程

    安卓手机的对外通信接口就只有USB跟音频口 xff0c 我们可采用其进行与外设进行通信 今天 xff0c 我们来讲讲安卓手机利用USB接口与外设进行通信 此时 xff0c 有两种情况 第一 xff1a USB xff08 手机 xff09
  • Android串口编程--开关灯Demo(附源码)

    1 项目简述 第二次玩硬件了 xff0c 第一次是通过局域网控制门的开关 xff0c 这次是通过ZB xff08 大概就是这么叫 xff0c 具体名字不清楚 xff09 控制灯的开关 xff0c 感觉控制硬件也就是给硬件发个byte数组而已
  • 安卓开发中的USB转串口通讯

    安卓开发中的USB转串口通讯 本文使用GitHub上开源的 hoho android usbserial USB串口库 该库基于 Android USB Host API xff0c 驱动完全由java开发 xff0c 无需root xff
  • Android USB转串口开发(hoho.android.usbserial串口库)

    使用hoho android usbserial串口库开发串口 import android app Application import android app PendingIntent import android content B
  • 安卓数据库开发helper

    package com mytest myapplication public class MyInfo public MyInfo int id String name String value ID 61 id Name 61 name
  • Android 在布局容器中动态添加控件

    这里 xff0c 通过一个小demo xff0c 就可以掌握在布局容器中动态添加控件 xff0c 以动态添加Button控件为例 xff0c 添加其他控件同样道理 1 addView 添加控件到布局容器 2 removeView 在布局容器
  • delphi offsetof , container_of 通过结构体成员获得到该结构体地址

    C宏 offsetof type member 该结构体成员相对于该结构体的偏移量 define offsetof TYPE MEMBER size t amp TYPE 0 gt MEMBER 那Delphi版的表示式怎么写呢 Nativ
  • Android 动态添加Button(1)

    这是一个非常简单的动态添加Button的例子 xff1a package com kkkk llll import android app Activity import android os Bundle import android w
  • 将一串随机数输入到二维坐标轴中,不断刷新JPanel,实现动态显示的效果微笑

    将一串随机数输入到二维坐标轴中 xff0c 不断刷新JPanel 实现动态显示的效果 import java awt BasicStroke import java awt BorderLayout import java awt Colo
  • onDraw什么时候被调用?

    1 onDraw是在View初化完成之后开始调用 2 postInvalidate 是重绘的 xff0c 也就是调用postInvalidate 后系统会重新调用onDraw方法画一次 onDraw实例 xff1a Java code 64
  • Android 动态绘制曲线等各种图形

    Android 中动态的绘制有两种方法 xff0c 一种是用OpenGL ES xff0c 它主要用来做3D图形开发 xff0c 对于一般的应用 xff0c 我们会采取自定义一个View xff0c 然后覆盖onDraw 的方法 xff0c
  • Android 曲线图绘制

    最近项目里要做一个简单的曲线图来标识数据 xff0c 开始以为很简单 xff0c android已经有那么多的开源图表库了 xff0c 什么achartenginee hellochart xff0c mpandroidchart等等 xf
  • android中在代码中动态布按钮和画板局并绘制曲线

    strong 绘图面板基类继承View strong package com mytest myapplication Utility import android graphics Color import android util Lo