`

自己早期(android1.1)做的一个绘图练习

 
阅读更多
仅仅是个练习而已!只做了第一个菜单的事件。其他都没事件。











代码片段
public mPayCanvas(Context context) {
			super(context);
			 //获得屏幕宽高
	        WindowManager windowManager = getWindowManager();
	        Display display = windowManager.getDefaultDisplay();
	        width = display.getWidth();
	        height = display.getHeight();
	        Log.i("TAG", "screenWidth="+width);//320
	        Log.i("TAG", "screenHeight="+height);//480
			width=320;
			height=430;
			// TODO Auto-generated constructor stub
			text=new String[10];
			paint=new Paint[10];
			rect=new RectF[10];
			col=3;//菜单列数
			state=ST_Instruction;
			setST(state);
			setFocusable(true); // 如果要响应按键,必须加上这句
			clearFocus();//必须加,以防第一次按键时无效。
//			setClickable(true);
			setFocusableInTouchMode(true);
//			setPressed(true);
			setLongClickable(false);
			setTitleColor(0xffff0000);

		}



private void draw_Menu(Canvas canvas){
//			canvas.drawText("菜单", (getWidth()-(int)paint[0].measureText(text[0]))>>1, getHeight()>>1, paint[0]);
			for(int i=0;i<drawable.length;i++){
				drawable[i].draw(canvas);
				canvas.drawText(menu_item[i], drawable[i].getBounds().left, drawable[i].getBounds().bottom+paint[2].getTextSize(), paint[2]);
			}
			RectF rect_menu = new RectF(drawable[index].getBounds().left, drawable[index].getBounds().top, drawable[index].getBounds().right, drawable[index].getBounds().bottom+paint[2].getTextSize()+5);
			canvas.drawRect(rect_menu, paint[3]);
			
			drawButton(canvas,true,true);
    	}
    	private void touchEvent_Menu(MotionEvent event){
    		float x=event.getX();
			float y=event.getY();
			
			if(x>rect[0].left&&x<rect[0].right&&y>rect[0].top&&y<rect[0].bottom){
				switch (index) {
				case 0:
					setST(ST_InputNumber);
					
					break;
				case 1:
				case 2:
				case 3:
					Log.i("TAG", "index====="+index);
				break;

				default:
					break;
				}
				
				return;
			}else if(x>rect[1].left&&x<rect[1].right&&y>rect[1].top&&y<rect[1].bottom){
				setST(ST_Exit);
				return;
			}
			
			int xx=drawable[0].getBounds().left;
			int yy=drawable[0].getBounds().top;
			int w=drawable[0].getIntrinsicWidth();//32
			int h=drawable[0].getIntrinsicHeight()+(int)paint[2].getTextSize();//48+
			int gapX=xx;
			int gapY=this.gapY-(int)paint[2].getTextSize();
//			Log.i("TAG", "w=="+w);
//	    	Log.i("TAG", "h=="+h);
//	    	Log.i("gapX", "gapX=="+gapX);
//	    	Log.i("gapY", "gapY=="+gapY);
	    	
			int indexX=0;
			int indexY=0;
			for(int i=0;i<drawable.length;i++){
				indexX=i%col;
		    	indexY=i/col;
			    if (x >= xx+indexX*gapX + indexX * w && x < xx+indexX*gapX + (indexX + 1) * w && y >= yy+indexY*gapY + indexY * h && y < yy+indexY*gapY + (indexY + 1) * h) {
			    	this.index=i;
			    	this.indexX=indexX;
			    	this.indexY=indexY;
//			    	Log.i("TAG", "index=="+index);
//			    	Log.i("TAG", "indexX=="+indexX);
//			    	Log.i("TAG", "indexY=="+indexY);
//			    	Log.i("TAG", "==============================================");
			    	keyDown_Menu(KeyEvent.KEYCODE_DPAD_CENTER,null);
			    	break;
			    }
			}
    	}

private void drawButton(Canvas canvas,boolean hasLeft,boolean hasRight){
    		if(hasLeft){
    			canvas.drawText(text[8], rect[0].left+2, rect[0].bottom-5, paint[0]);
//    			canvas.drawText(text[8], x+5, height-5, paint[0]);
//    			rect[0] = new RectF(2, getHeight()-paint[0].getTextSize()-2-5, 2+paint[0].measureText(text[8])+5, getHeight()-2);
    			canvas.drawRect(rect[0], paint[3]);
    		}
    		if(hasRight){
    			canvas.drawText(text[9], rect[1].left+2, rect[1].bottom-5, paint[0]);
//    			canvas.drawText(text[9], width-paint[0].measureText(text[9])-2, height-5, paint[0]);
//    			rect[1] = new RectF(getWidth()-paint[0].measureText(text[9])-5, getHeight()-paint[0].getTextSize()-2-5, getWidth()-2, getHeight()-2);
    			canvas.drawRect(rect[1], paint[3]);
    			
    		}
    	}
    	private void drawGrid(Canvas canvas){
    		String[][] pad={{"1","2","3"},{"4","5","6"},{"7","8","9"},{"退格","0","全清"}};
    		RectF rect=null;
    		int col=pad[0].length;
    		int row=pad.length;
    		int w=80;
    		int h=60;
    		int x=((width-col*w)>>1);
    		int y=(height>>1)-h*2;
    		for(int i=0;i<row;i++){
    			for(int j=0;j<col;j++){
	    			rect = new RectF(x+j*w,y+i*h,x+j*w+w,y+h+i*h);
	    			canvas.drawRect(rect, paint[3]);
	    			canvas.drawText(pad[i][j], rect.left+((int)(w-paint[0].measureText(pad[i][j]))>>1),rect.top+(h>>1)+5, paint[0]);
    			}
    		}
    	}
  • 大小: 12.5 KB
  • 大小: 12.1 KB
  • 大小: 25 KB
  • 大小: 13.5 KB
  • 大小: 24.5 KB
分享到:
评论

相关推荐

    Android Opengles 开发入门技术文档

    - Android 2.2 引入了对OpenGL ES 2.0的支持,这是一个重要的升级,因为它引入了更强大的着色器语言(GLSL),允许开发者编写自定义的顶点和片段着色器,实现更复杂的图形效果。 - Android 2.3 添加了剩余的OpenGL...

    MATLAB Simulink电动助力转向系统(EPS)模型构建与控制方法解析

    内容概要:本文详细介绍了基于MATLAB/Simulink的电动助力转向系统(EPS)模型的构建及其控制方法。首先,文中阐述了EPS在提升驾驶体验和安全性方面的重要意义。接着,重点讲解了四个关键模型的搭建:整车二自由度模型用于研究车辆转向特性;助力特性曲线模型确定不同驾驶条件下助力电机提供的助力力矩;助力电机模型模拟助力电机的工作过程;齿条模型描述助力电机转矩转化为车轮转向的动作。每个模型都有具体的参数设定和代码示例。此外,文章还解释了模型的输入(如前轮转角、方向盘力矩)和输出(转向助力力矩),并指出控制方法基于各模型间的输入输出关系,利用基本数学公式和逻辑判断实现。 适用人群:汽车工程领域的研究人员、工程师和技术爱好者。 使用场景及目标:适用于希望深入了解EPS工作原理的研究人员,以及需要进行EPS系统设计和优化的工程师。目标是掌握EPS系统的建模方法和控制策略,为实际项目提供理论支持和技术指导。 其他说明:文中提供了丰富的代码片段和详细的模型介绍,有助于读者更好地理解和实践。同时强调了EPS对于提高驾驶安全性和舒适性的重要性。

    实训商业源码-帝国cms7.5 7.2 UTF-8移动端同步插件-酷网站-论文模板.zip

    实训商业源码-帝国cms7.5 7.2 UTF-8移动端同步插件-酷网站-论文模板.zip

    基于Lasso分位数回归的数据预测分析及其广泛应用

    内容概要:本文详细介绍了基于Lasso分位数回归的数据回归预测方法。首先阐述了Lasso分位数回归作为一种结合Lasso回归与分位数回归的统计方法,能够在处理变量选择和模型复杂度方面发挥重要作用。接着解释了其基本原理,即在分位数回归基础上加入Lasso正则化项,从而确保模型既能良好拟合数据,又能有效避免过拟合现象。随后讨论了具体实施流程,从数据预处理到最终预测,涵盖了特征选择、模型构建以及参数优化等多个环节。最后强调了该方法在多个行业(如金融、医疗)的实际应用场景及其潜在价值。 适合人群:对统计学、机器学习有一定了解的研究人员和技术爱好者。 使用场景及目标:适用于需要精确预测并同时考虑多维度因素影响的场合,特别是在面对高维数据时,希望通过减少冗余变量来提高预测准确性的情况。 其他说明:文中提到的方法不仅限于特定领域,而是可以在多种不同类型的预测任务中发挥作用,为决策提供科学依据。

    【MATLAB例程】线性卡尔曼滤波的程序,三维状态量和观测量,较为简单,可用于理解多维KF

    这段代码实现了一个 三维状态的扩展卡尔曼滤波 (Extended Kalman Filter, EKF) 算法。通过生成过程噪声和观测噪声,对真实状态进行滤波估计,同时对比了滤波前后状态量的误差和误差累积分布曲线。 只有一个m文件,下载后使用MATLAB打开运行即可,带误差输出。

    毕业设计-百川多公众号集字福袋 2.0.5开源-整站商业源码.zip

    毕业设计-百川多公众号集字福袋 2.0.5开源-整站商业源码.zip

    实训商业源码-多商家营销活动平台V1.3.9小程序前后端完整全开源解密源码-论文模板.zip

    实训商业源码-多商家营销活动平台V1.3.9小程序前后端完整全开源解密源码-论文模板.zip

    ISC大作业论文-CSAPP-2025春

    ISC大作业论文

    毕业论文-在线进销存-整站商业源码.zip

    毕业论文-在线进销存-整站商业源码.zip

    毕业设计-步数宝步数换购小程序 7.8.1-整站商业源码.zip

    毕业设计-步数宝步数换购小程序 7.8.1-整站商业源码.zip

    实训商业源码-叮咚-门店会员卡小程序4.8.2开源-论文模板.zip

    实训商业源码-叮咚-门店会员卡小程序4.8.2开源-论文模板.zip

    毕业论文-芸众圈子社区V1.7.6 开源版-整站商业源码.zip

    毕业论文-芸众圈子社区V1.7.6 开源版-整站商业源码.zip

    配电网有功电压控制的多智能体强化学习实践:Dec-POMDP框架下的七种MARL算法及开源环境构建

    内容概要:本文探讨了多智能体强化学习(MARL)在配电网有功电压控制中的应用。文中介绍了将电压约束转化为势垒函数的方法,并在Dec-POMDP框架下对七种最先进的MARL算法进行了大规模实验。实验表明,设计合理的电压势垒函数对于提高电压控制效果至关重要。此外,作者还建立了开源环境,旨在促进电力社区和MARL社区的合作,推动MARL算法的实际应用。 适合人群:从事电力系统自动化、智能电网研究的专业人士,以及对多智能体系统和强化学习感兴趣的科研人员。 使用场景及目标:适用于需要优化配电网电压控制的场景,特别是希望通过软件手段而非硬件升级来提升电力质量和缓解电力拥塞的情况。目标是展示MARL在电力系统中的潜力,并为后续研究提供工具和支持。 其他说明:文章不仅讨论了理论和技术细节,还包括大量代码片段,帮助读者理解和实践MARL在电压控制中的具体应用。

    PFC3D岩石注浆破坏模拟:注浆速度、流量调节及孔位选择研究

    内容概要:本文基于PFC3D(Particle Flow Code 3D)软件,详细探讨了岩石注浆过程中的破坏现象及其背后的机理。首先介绍了注浆破坏的复杂性,指出这是由材料特性、地质构造和计算机模拟技术共同决定的。接着重点讲解了注浆速度和流量的调整方法,强调适当的速度和流量对于确保注浆效率和避免过度破坏的重要性。最后讨论了在不考虑渗流场的情况下,如何根据岩石结构特征选择最佳的注浆孔位置,以提高注浆效果并保护周围岩石结构。 适合人群:从事地质工程领域的研究人员和技术人员,尤其是那些希望深入了解岩石注浆过程的人。 使用场景及目标:适用于需要利用PFC3D进行岩石注浆模拟的研究项目,旨在帮助用户掌握注浆速度、流量调节技巧以及合理的注浆孔位选择方法。 其他说明:文中提供了简单的PFC3D模拟代码框架,便于读者快速上手实践。同时提醒读者注意实际操作时应结合实验室理论模型和现场具体情况来进行参数优化。

    电力系统研究中的IEEE标准节点仿真模型及其应用

    内容概要:本文详细介绍了IEEE标准节点仿真模型系列,涵盖了从简单到复杂的多个节点配置,如2机5节点、6节点、3机9节点、13节点、5机14节点、15节点、30节点、33节点、34节点、10机39节点以及69节点。所有模型均已成功调试并实现了潮流计算,适用于短路仿真、稳定性研究和电能质量研究等领域。文中还特别强调了三相等效电源的应用,这是模拟真实电力系统的关键要素之一。 适合人群:从事电力系统研究、仿真和优化的专业人士和技术人员。 使用场景及目标:①用于电力系统短路仿真的建模与分析;②评估电力系统的稳定性和可靠性;③研究电能质量问题,提升电力设备的运行效率和寿命。 阅读建议:本文提供了丰富的背景知识和具体应用场景,建议读者结合实际项目需求选择合适的模型进行深入研究和应用。

    实训商业源码-【超人】积分商城 5.2.26-论文模板.zip

    实训商业源码-【超人】积分商城 5.2.26-论文模板.zip

    实训商业源码-思创兼职小程序V6.7.6 开源版-论文模板.zip

    实训商业源码-思创兼职小程序V6.7.6 开源版-论文模板.zip

    2025年手绘风格毕业设计答辩模板范文.pptx

    2025年手绘风格毕业设计答辩模板范文

Global site tag (gtag.js) - Google Analytics