IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android自定义控件(状态提示图表,我先收藏为敬 -> 正文阅读

[移动开发]Android自定义控件(状态提示图表,我先收藏为敬

            canvas.drawText(String.valueOf(mYLevel.get(index)), mZeroPos[0], mZeroPos[1]-(index*offsetY), mPaint);

        }



        if (index == mGridLevel) {

            //坐标区间 = 真实区间 + 1

            break;

        }



        mPaint.setColor(mGridColorLevel.get(mGridLevel - 1 - index));

        mPaint.setStyle(Paint.Style.FILL);

        //绘制区间叠加图谱方块,从远到0坐标,因为小的图会覆盖大的图

        canvas.drawRect(mMaxYPos[0], mMaxYPos[1] + index*offsetY, mMaxXPos[0]-index*offsetX, mMaxXPos[1], mPaint);



        mPaint.setColor(mGridTxtColorLevel.get(index));

        mPaint.setTextAlign(Paint.Align.RIGHT);

        mPaint.setTextSize(mXYTitleTextSize);

        //绘制每个方块状态区间的提示文字

        canvas.drawText(mGridLevelText.get(index), mMaxXPos[0] - index * offsetX - mXYTitleTextSize,

                mMaxYPos[1] + index * offsetY + mXYTitleTextSize, mPaint);

    }

    //绘制当前坐标

    drawNotice(canvas, offsetX, offsetY);

}



private void drawNotice(Canvas canvas, int offsetX, int offsetY) {

    int realPosX = 0;

    int realPosY = 0;

    //计算传入的x值与真实屏幕坐标的像素值的百分比差值转换

    for (int index=0; index<mGridLevel; index++) {

        if (mMeasureXpos >= mXLevel.get(index) && mMeasureXpos < mXLevel.get(index+1)) {

            int subValue = mMeasureXpos - mXLevel.get(index);

            int offset = mXLevel.get(index+1) - mXLevel.get(index);

            realPosX = mZeroPos[0] + index*offsetX + (subValue / offset);

            break;

        }

    }

    //计算传入的y值与真实屏幕坐标的像素值的百分比差值转换

    for (int index=0; index<mGridLevel; index++) {

        if (mMeasureYpos >= mYLevel.get(index) && mMeasureYpos < mYLevel.get(index+1)) {

            int subValue = mMeasureYpos - mYLevel.get(index);

            int offset = mYLevel.get(index+1) - mYLevel.get(index);

            realPosY = mZeroPos[1] - index*offsetY - (offsetY - (subValue / offset));

            break;

        }

    }

    //画我们传入的坐标点的标记小红点

    mPaint.setColor(Color.RED);

    mPaint.setStyle(Paint.Style.FILL);

    canvas.drawCircle(realPosX, realPosY, 8, mPaint);



    int[] centerPos = {mZeroPos[0] + mRealWidth/2, mZeroPos[1] - mRealHight/2};



    mPaint.setColor(Color.WHITE);

    mPaint.setStyle(Paint.Style.FILL_AND_STROKE);

    RectF rectF = null;

    Path path = new Path();

    //画红点旁边的提示框和文字,有四个区域,然后提示框的小三角指标方位不同

    if (realPosX <= centerPos[0] && realPosY >= centerPos[1]) {

        //left-bottom

        //画三角形

        path.moveTo(realPosX+5, realPosY+5);

        path.lineTo(realPosX+15, realPosY+15);

        path.lineTo(realPosX+15, realPosY-15);

        //画矩形背景

        rectF = new RectF(realPosX+15, realPosY-40, realPosX+200, realPosY + 30);

        canvas.drawRoundRect(rectF, 15, 15, mPaint);

        //画提示框的文字

        mPaint.reset();

        mPaint.setColor(Color.RED);

        mPaint.setTextSize(mXYTitleTextSize - 5);

        canvas.drawText("("+mMeasureXpos+", "+mMeasureYpos+")", realPosX+30, realPosY, mPaint);

    }

    else if (realPosX <= centerPos[0] && realPosY < centerPos[1]) {

        //left-top

        path.moveTo(realPosX+5, realPosY+5);

        path.lineTo(realPosX+15, realPosY+15);

        path.lineTo(realPosX + 15, realPosY - 15);



        rectF = new RectF(realPosX+15, realPosY - 20, realPosX+200, realPosY + 50);

        canvas.drawRoundRect(rectF, 15, 15, mPaint);



        mPaint.reset();

        mPaint.setColor(Color.RED);

        mPaint.setTextSize(mXYTitleTextSize - 5);

        canvas.drawText("("+mMeasureXpos+", "+mMeasureYpos+")", realPosX+30, realPosY+20, mPaint);

    }

    else if (realPosX > centerPos[0] && realPosY >= centerPos[1]) {

        //right-bottom

        path.moveTo(realPosX-5, realPosY+5);

        path.lineTo(realPosX-15, realPosY+15);

        path.lineTo(realPosX - 15, realPosY - 15);



        rectF = new RectF(realPosX-200, realPosY-40, realPosX-15, realPosY + 30);

        canvas.drawRoundRect(rectF, 15, 15, mPaint);



        mPaint.reset();

        mPaint.setColor(Color.RED);

        mPaint.setTextSize(mXYTitleTextSize - 5);

        canvas.drawText("("+mMeasureXpos+", "+mMeasureYpos+")", realPosX-180, realPosY, mPaint);

    }

    else if (realPosX > centerPos[0] && realPosY < centerPos[1]) {

        //right-top

        path.moveTo(realPosX-5, realPosY+5);

        path.lineTo(realPosX-15, realPosY+15);

        path.lineTo(realPosX - 15, realPosY - 15);



        rectF = new RectF(realPosX-200, realPosY - 20, realPosX-15, realPosY + 50);

        canvas.drawRoundRect(rectF, 15, 15, mPaint);



        mPaint.reset();

        mPaint.setColor(Color.RED);

        mPaint.setTextSize(mXYTitleTextSize - 5);

        canvas.drawText("("+mMeasureXpos+", "+mMeasureYpos+")", realPosX-180, realPosY+30, mPaint);

    }



    path.close();

    mPaint.setColor(Color.WHITE);

    mPaint.setStyle(Paint.Style.FILL_AND_STROKE);

    canvas.drawPath(path, mPaint);

}



//设置当前比值

public void updateValues(int x, int y) {

    mMeasureXpos = x;

    mMeasureYpos = y;



    postInvalidate();

}



//设置XY轴顶角的title字体大小

public void setTitleTextSize(int size) {

    mXYTitleTextSize = size;

}



//初始化X轴的坐标区间点值,可以不均等分

public void initXLevelOffset(ArrayList<Integer> list) {

    mXLevel.clear();

    mXLevel.addAll(list);

}



//初始化Y轴的坐标区间点值,可以不均等分

public void initYLevelOffset(ArrayList<Integer> list) {

    mYLevel.clear();

    mYLevel.addAll(list);

}



//初始化每个区间的提示文字,如果不想显示可以设置""

public void initGridLevelText(ArrayList<String> list) {

    mGridLevelText.clear();

    mGridLevelText.addAll(list);

}



//初始化每个区间的颜色

public void initGridColorLevel(ArrayList<Integer> list) {

    mGridColorLevel.clear();

    mGridColorLevel.addAll(list);

}



//初始化每个区间的提示文字颜色

public void initGridTxtColorLevel(ArrayList<Integer> list) {

    mGridTxtColorLevel.clear();

    mGridTxtColorLevel.addAll(list);

}



//初始化XY轴title

public void initTitleXY(String x, String y) {

    mTitleX = x;

    mTitleY = y;

}

}




再来看下布局文件:



<RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:tools="http://schemas.android.com/tools" 

android:layout_width="match_parent"

android:layout_height="match_parent">



<com.yanbober.customerviewdemo.areachartsview.AreaChartsView

    android:id="@+id/area_charts_view"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:layout_margin="10dp"/>



再看看主界面:



public class MainActivity extends AppCompatActivity {

private AreaChartsView mAreaChartsView;

private Timer timer;



@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);



    mAreaChartsView = (AreaChartsView) this.findViewById(R.id.area_charts_view);



    //初始化自定义图表的规格和属性

    ArrayList<Integer> mXLevel = new ArrayList<>();

    ArrayList<Integer> mYLevel = new ArrayList<>();

    ArrayList<String> mGridLevelText = new ArrayList<>();

    ArrayList<Integer> mGridColorLevel = new ArrayList<>();

    ArrayList<Integer> mGridTxtColorLevel = new ArrayList<>();

    //初始化x轴坐标区间

    mXLevel.add(0);

    mXLevel.add(60);

    mXLevel.add(90);

    mXLevel.add(100);

    mXLevel.add(110);

    mXLevel.add(120);

    //初始化y轴坐标区间

    mYLevel.add(0);

    mYLevel.add(90);

    mYLevel.add(140);

    mYLevel.add(160);

    mYLevel.add(180);

    mYLevel.add(200);

    //初始化区间颜色

    mGridColorLevel.add(Color.parseColor("#1FB0E7"));

    mGridColorLevel.add(Color.parseColor("#4FC7F4"));

    mGridColorLevel.add(Color.parseColor("#4FDDF2"));

    mGridColorLevel.add(Color.parseColor("#90E9F4"));

    mGridColorLevel.add(Color.parseColor("#B2F6F1"));

    //初始化区间文字提示颜色

    mGridTxtColorLevel.add(Color.parseColor("#EA8868"));

    mGridTxtColorLevel.add(Color.parseColor("#EA8868"));

    mGridTxtColorLevel.add(Color.parseColor("#EA8868"));

    mGridTxtColorLevel.add(Color.WHITE);

    mGridTxtColorLevel.add(Color.BLACK);

    //初始化区间文字

    mGridLevelText.add("异常");

    mGridLevelText.add("过高");

    mGridLevelText.add("偏高");

    mGridLevelText.add("正常");

    mGridLevelText.add("偏低");



    mAreaChartsView.initGridColorLevel(mGridColorLevel);

    mAreaChartsView.initGridLevelText(mGridLevelText);

    mAreaChartsView.initGridTxtColorLevel(mGridTxtColorLevel);

    mAreaChartsView.initXLevelOffset(mXLevel);

    mAreaChartsView.initYLevelOffset(mYLevel);

    mAreaChartsView.initTitleXY("投入量(H)", "产出量(H)");

}



@Override

protected void onStart() {

    super.onStart();

最后

给大家送上我成功跳槽复习中所整理的资料,由于文章篇幅有限,所以只是把题目列出来了

CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》

image

image

l);

    mAreaChartsView.initXLevelOffset(mXLevel);

    mAreaChartsView.initYLevelOffset(mYLevel);

    mAreaChartsView.initTitleXY("投入量(H)", "产出量(H)");

}



@Override

protected void onStart() {

    super.onStart();

最后

给大家送上我成功跳槽复习中所整理的资料,由于文章篇幅有限,所以只是把题目列出来了

CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》

[外链图片转存中…(img-Zuv0mmG1-1630836796482)]

[外链图片转存中…(img-fa4fBp0U-1630836796483)]

image

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:16:16  更:2021-09-06 11:17:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:00:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码