当前位置: 首页 > news >正文

平面设计软件下载网站/如何制作微信小程序

平面设计软件下载网站,如何制作微信小程序,武汉网站建设 熊掌号,英文网站建设大概多少钱控件选择顺序:原生,开源,自定义控件 今天做一个类似于股票走势图的控件,效果图: 首先先了解下自定义控件的执行流程 新建CustomView CustomView //继承View或View的子类,就是自定义控件 public class …

控件选择顺序:原生,开源,自定义控件

今天做一个类似于股票走势图的控件,效果图:
在这里插入图片描述
首先先了解下自定义控件的执行流程

新建CustomView

CustomView

//继承View或View的子类,就是自定义控件
public class CustomView extends View {int viewHeight;int viewWidth;//AttributeSet对应布局中的属性public CustomView(Context context, AttributeSet attrs) {super(context, attrs);}//得到控件大小@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {viewWidth = w;viewHeight = h;super.onSizeChanged(w, h, oldw, oldh);}//canvas画文字,图形@Overrideprotected void onDraw(Canvas canvas) {Paint paint = new Paint();paint.setColor(Color.BLACK);Rect rect = new Rect(0,0,viewWidth,viewHeight);canvas.drawRect(rect,paint);}@Overridepublic boolean onTouchEvent(MotionEvent event) {return super.onTouchEvent(event);}}

MainActivity

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}
}

activity_main

<com.xx.myapplication.CustomViewandroid:layout_width="match_parent"android:layout_height="match_parent"/>

第一次执行流程
MainActivity中onCreate中的setContentView执行后
执行自定义控件的构造方法
onSizeChanged
onDraw
如果单击,触发onTouchEvent

如果横竖屏发生变化
会重新执行MainActivity的onCreate
执行自定义控件的构造方法
onSizeChanged
onDraw

如果AndroidManifest中设置configChanges

android:configChanges="orientation|screenSize|keyboardHidden"

再次执行程序,第一次执行流程还是相同的
如果横竖屏发生变化,会直接再次执行
onSizeChanged
onDraw

现在我们绘制底部的数字
在这里插入图片描述
CustomView

//继承View或View的子类,就是自定义控件
public class CustomView extends View {int viewHeight;int viewWidth;private ArrayList<HashMap<String, String>> list;int timeGap;//时间间隙public void setData(ArrayList<HashMap<String,String>> list){this.list = list;}//AttributeSet对应布局中的属性public CustomView(Context context, AttributeSet attrs) {super(context, attrs);}//得到控件大小@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {viewWidth = w;viewHeight = h;super.onSizeChanged(w, h, oldw, oldh);}//canvas画文字,图形@Overrideprotected void onDraw(Canvas canvas) {Paint paint = new Paint();paint.setColor(Color.BLACK);Rect rect = new Rect(0,0,viewWidth,viewHeight);canvas.drawRect(rect,paint);//画时间paint.setColor(Color.WHITE);paint.setTextSize(24);//用代码得最后的时间文字的宽度String lastTime = list.get(list.size() - 1).get("time");Rect sizeRect = new Rect();//矩形大小就是文字的大小paint.getTextBounds(lastTime,0,lastTime.length(),sizeRect);int lastTimeWidth = sizeRect.width();timeGap = (viewWidth-lastTimeWidth)/(list.size()-1);for(int i=0;i<list.size();i++){HashMap<String,String> hashMap = list.get(i);String time = hashMap.get("time");int timeX = i*timeGap;//画文字的时候,y在文字的下面int timeY = viewHeight;canvas.drawText(time,timeX,timeY,paint);}}@Overridepublic boolean onTouchEvent(MotionEvent event) {return super.onTouchEvent(event);}}

MainActivity

public class MainActivity extends AppCompatActivity {private CustomView customView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);customView = findViewById(R.id.customView);customView.setData(getData());}public ArrayList<HashMap<String,String>> getData(){ArrayList<HashMap<String,String>> list = new ArrayList<>();HashMap<String,String> map = new HashMap<>();map.put("time","9");map.put("price","3200");list.add(map);map = new HashMap<>();map.put("time","10");map.put("price","5000");list.add(map);map = new HashMap<>();map.put("time","11");map.put("price","8000");list.add(map);map = new HashMap<>();map.put("time","13");map.put("price","7800");list.add(map);return list;}
}

画价格

在这里插入图片描述

//继承View或View的子类,就是自定义控件
public class CustomView extends View {......int maxPrice;//最大价格public void setData(ArrayList<HashMap<String,String>> list){this.list = list;//计算最大价格for(int i=0;i<list.size();i++){int currentPrice = Integer.parseInt(list.get(i).get("price"));if(currentPrice > maxPrice){maxPrice = currentPrice;}}}......//canvas画文字,图形@Overrideprotected void onDraw(Canvas canvas) {.....//价格高度 = 视图高度 - 文字高度int priceHeight = viewHeight -sizeRect.height();timeGap = (viewWidth-lastTimeWidth)/(list.size()-1);for(int i=0;i<list.size();i++){HashMap<String,String> hashMap = list.get(i);String time = hashMap.get("time");int timeX = i*timeGap;//画文字的时候,y在文字的下面int timeY = viewHeight;canvas.drawText(time,timeX,timeY,paint);//画价格String price = hashMap.get("price");int currentPrice = Integer.parseInt(price);int priceY = currentPrice * priceHeight / maxPrice;//值越大,显示在下面。应该显示在上面priceY = priceHeight - priceY;//最大值 显示在控件外面priceY = priceY + sizeRect.height();canvas.drawText(price,timeX,priceY,paint);}}
......
}

画线

//继承View或View的子类,就是自定义控件
public class CustomView extends View {......//canvas画文字,图形@Overrideprotected void onDraw(Canvas canvas) {......//画时间......for(int i=0;i<list.size();i++){......//画线if(i<list.size()-1){int startX=0,startY=0,stopX=0,stopY=0;startX = timeX;startY = priceY;stopX = (i+1)*timeGap;int nextPrice = Integer.parseInt(list.get(i+1).get("price"));stopY = nextPrice * priceHeight /maxPrice;//倒过来,大的应该显示在上面stopY = priceHeight-stopY;//最大的值可能跑到屏幕外,所以加上文字高度stopY = stopY + sizeRect.height();canvas.drawLine(startX,startY,stopX,stopY,paint);}}}......}

现在把价格改为随机变化的
在这里插入图片描述
修改MainActivity

public class MainActivity extends AppCompatActivity {private CustomView customView;Random random = new Random();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);customView = findViewById(R.id.customView);customView.setData(getData());final Handler handler = new Handler();handler.postDelayed(new Runnable() {@Overridepublic void run() {customView.setData(getData());//让android框架去调用ondraw、//间接调用customView.invalidate();handler.postDelayed(this,1000);}},1000);}public ArrayList<HashMap<String,String>> getData(){ArrayList<HashMap<String,String>> list = new ArrayList<>();HashMap<String,String> map = new HashMap<>();map.put("time","9");map.put("price",String.valueOf(random.nextInt(5000)));list.add(map);map = new HashMap<>();map.put("time","10");map.put("price",String.valueOf(random.nextInt(5000)));list.add(map);map = new HashMap<>();map.put("time","11");map.put("price",String.valueOf(random.nextInt(5000)));list.add(map);map = new HashMap<>();map.put("time","13");map.put("price",String.valueOf(random.nextInt(5000)));list.add(map);return list;}
}

现在增加点击画线功能
在这里插入图片描述

//继承View或View的子类,就是自定义控件
public class CustomView extends View {......int touchY;//单击的Y坐标......//canvas画文字,图形@Overrideprotected void onDraw(Canvas canvas) {......//画线if(touchY>0){paint.setColor(Color.RED);canvas.drawLine(0,touchY,viewWidth,touchY,paint);}}@Overridepublic boolean onTouchEvent(MotionEvent event) {touchY = (int) event.getY();int x = (int) event.getX();//单击的第几个时间点int index = x/timeGap;Toast.makeText(getContext(),"第"+index+"个,"+list.get(index).get("time"),Toast.LENGTH_SHORT).show();return super.onTouchEvent(event);}}

注意:
绘制文本的时候,参数X,Y并不是绘制的起点,而是文字的底部,这个x,y 是文字的左下角的坐标

demo下载地址
https://download.csdn.net/download/u010356768/11131421

http://www.jmfq.cn/news/5159935.html

相关文章:

  • 做网站怎么调用栏目/市场营销七大策略
  • 旅游攻略网站开发背景/靠谱的代运营公司
  • 番禺有经验的网站建设/搜索引擎的工作原理分为
  • abc官网/app优化
  • 深圳哪做网站/谷歌chrome手机版
  • 关于网站建设新闻/新浪nba最新消息
  • 做外汇网站做什么类型网站好/百度极速版推广
  • 外包网站设计/百度推广登录首页网址
  • 娄底手机网站制作/网站的推广方法有哪些
  • 建立视频网站/东莞市民最新疫情
  • 湘潭城乡建设发展集团网站/太原seo外包服务
  • 深圳网站建设哪家公司好/百度平台客服电话
  • java 网站开发教程 pdf/晋江友情链接是什么意思
  • 网站设计开发软件网页美化工具/今天今日新闻头条最新消息
  • 音乐网站素材/推广代理平台
  • 那个网站可以接做网页私活/谷歌商店paypal官网下载
  • 电商网站开发哪里好/数字化营销怎么做
  • 中国林业工程建设协会网站/五八精准恶意点击软件
  • 纯css做网站/站长之家网站流量查询
  • 做贺卡的网站/电商网店
  • 荆州做网站公司/电脑培训班有哪些科目
  • 网站关键词搜不到了/百度快照优化培训班
  • 日本做外贸网站/上海百度推广优化公司
  • 网站建站售后服务/手机百度官网首页
  • 做网站建设公司crm在线/口碑营销的形式
  • wordpress暴力破解文件/优化网络搜索引擎
  • 快速 复制 建设网站/百度竞价培训班
  • wordpress后台忘记密码/西藏自治区seo 标题 关键词优化
  • 美妆网站建设方案/天津搜索引擎推广
  • 做网站的优惠广告/社群营销怎么做