`
- 浏览:
5765 次
- 性别:
-
android绘制3*3游戏界面,并实现在其上添加字
[b]绘制3*3游戏界面,并实现在其上添加字
创建ProjActivity类继承Activity类
public class ProjActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyGridView2 mgv = new MyGridView2(this);
getWindow().setContentView(mgv);
//设置View处于触摸模式是获得焦点
mgv.setFocusableInTouchMode(true);
}
}
在Mainfest.xml中
<activity
android:label="@string/app_name"
android:name=".ProjActivity " >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
MyGridView2类
public class MyGridView2 extends View{
//定义列数
private int cols = 3;
//x轴的偏移量
private int offset_x;
//y轴的偏移量
private int offset_y;
//小单元格的宽度
private int smallCellSize;
//大单元格的宽度
private int bigCellSize;
//当前的单元格
private Rect curCell = new Rect();
private int x;
private int y;
//保存输入的数据
private int nums[][] = new int[cols][cols];
public MyGridView2(Context context){
super(context);
}
public boolean onKeyDown(int keyCode, KeyEvent event){
if(keyCode >= 8 && keyCode <= 16){
setNumValue(keyCode - 7);
}
invalidate();//重新再画一次
return super.onKeyDown(keyCode,event);
}
@Override
public boolean onTouchEvent(MotionEvent event){
//获取当前单元格的左上角的坐标
invalidate(curCell);
x = (int)((event.getX() - offset_x) / smallCellSize) * smallCellSize + offset_x;
y = (int)((event.getY() - offset_y) / smallCellSize) * smallCellSize + offset_y;
//修改矩形的尺寸
curCell.set(x,y,x+smallCellSize,y+smallCellSize);
//设置当前单元格为脏数据
invalidate(curCell);//要求重新绘制curCell
return super.onTouchEvent(event);
}
@Override
protected void onDraw(Canvas canvas){
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
//获取画布的尺寸
int w,h;
w = getWidth();
h = getHeight();
//计算偏移量
//如果是h>w
if(h>w){
offset_x = 20;
bigCellSize = w - offset_x * 20;
smallCellSize = bigCellSize / cols;
offset_y = (h - bigCellSize) / 2;
}else{
offset_y = 20;
bigCellSize = bigCellSize / cols;
offset_x = (w - bigCellSize) / 2;
}
//画线
//定义线的样式
Paint linePaint = new Paint();
linePaint.setColor(Color.GREEN);
//画水平线
for(int i=0;i<=cols;i++){
canvas.drawLine(offset_x,offsex_y + i * smallCellSize, offset_x + bigCellSize, offset_y + i * smallCellSize, linePaint);
}
for(int i=0;i<=cols;i++){
canvas.drawLine(offset_x + i * smallCellSize, offset_y, offset_x + i * smallCellSize, offset_y + bigCellSize, linePaint);
}
//画当前的单元格
Paint curCellPaint = new Paint();
curCellPaint.setColor(Color.argb(160,255,0,0));
canvas.drawRect(curCell,curCellPaint);
//画数字
Paint textPaint = new Paint();
textPaint.setTextAlign(Paint.Align.CENTER);//放在中间
textPaint.setTextSize((int)(0.75 * smallCellSize));
textPaint.setColor(Color.GREEN);
for(int i=0;i<cols;i++){
for(int j=0;j<cols;j++){
float x = offset_x + j * smallCellSize + smallCellSize / 2;
float_y = offset_y + i * smallCellSize + smallCellSize / 2 - (fm.ascent + fm.descent) / 2;
canvas.drawText(getNumString(nums[i][j]), x,y,textPaint);
}
}
Log.d("ProjActivity","调用onDraw");
}
//把数字转化为字符串
private String getNumString(int num){
if(num == 0){
return "";
}else{
return num + "";
}
}
//设置数组的值
private void setNumValue(int value){
int ax,ay;
ax = (y - offset_y) / smallCellSize;
ay = (x - offset_x) / smallCellSize;
nums[ax][ay] = value;
}
}
[b][/b][/b]
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
5. **控制显示与隐藏**:为了在适当的时候显示和隐藏欢迎界面,可以在`Activity`中添加一个标记变量,如`isContentLoaded`,当主界面加载完成时将其设置为`true`。然后在`onWindowFocusChanged()`方法中检查此变量,...
在Android平台上,实现苹果风格的数字锁屏界面是一项有趣且具有挑战性的任务。这个项目旨在为Android设备提供与苹果iOS类似的锁屏体验,让用户能够通过输入预设的数字密码来解锁设备。以下是一些关键的知识点和实现...
在Android平台上开发医疗应用,尤其是涉及到生理数据可视化如心电图(ECG)的应用,是一项技术挑战。本项目提供了一个可以直接使用的示例,用于通过蓝牙接收心电仪数据并进行心电图绘制。以下是关于这一过程涉及的...
在Android开发中,Canvas是用于在屏幕上绘制图形和文本的核心组件。Paint对象则是用来设置绘制样式,如颜色、字体、线宽等。本教程将详细讲解如何利用Paint和Canvas在Android应用中实现在竖直方向上写字。 1. **...
"Android数字自动滚动效果"是一个常见的需求,它能让数字在界面上持续滚动,给人一种动态更新的感觉。本篇将深入探讨如何在Android应用中实现这种效果,以及如何解决运行时可能遇到的问题。 首先,要实现这个功能,...
- **Bitmap和Canvas**:用于处理和绘制游戏中的图像,Bitmap存储图片数据,Canvas则用于在屏幕上绘制Bitmap。 - **动画框架**:可能使用Android的Animation API来实现图片交换的动画效果,增加用户体验。 4. **...
360界面以其简洁、直观和用户友好的特点深受用户喜爱,因此在Android上实现这样的界面,需要掌握以下几个核心技术和设计原则: 1. **布局管理器(Layout Managers)**:Android提供多种布局管理器,如线性布局...
这些功能通常会封装在自定义的`GameView`或`GameBoard`类中,它们继承自Android的`View`类,负责绘制游戏界面并处理用户交互。 1. **生成随机数字**:游戏开始时,会在棋盘的空位上随机生成2或4,这可以通过随机数...
Android 投篮游戏是一款基于Android平台的休闲娱乐应用,它通过模拟篮球投篮的场景,让用户在手机上体验投篮的乐趣。本项目源码提供了一个完整的开发实例,适合Android开发者进行学习和参考,以提升在游戏开发领域的...
Canvas是Android图形系统的核心,它提供了在Bitmap上进行绘制的基础工具。 首先,我们需要创建一个新的自定义View类,例如名为`BatteryView`,继承自`View`。在这个类中,我们将实现绘制电池的方法。下面是一些关键...
在Android平台上实现类似iPhone的界面是一项技术挑战,但并非不可能。Android系统以其高度的可定制性和开放性,允许开发者通过自定义View来创造出各种各样的界面风格,包括模仿iPhone的UI设计。以下是一些关键的知识...
在安卓开发中,动态游戏界面的设计与实现是至关重要的,因为它是用户与游戏交互的窗口。游戏界面不仅要吸引玩家的注意力,还要提供直观的操作方式,确保游戏体验流畅且有趣。以下是一些关于创建动态游戏界面的关键...
本文将详细介绍如何在Android平台上绘制炫酷的引导界面。引导界面通常用于向新用户介绍应用的主要功能或特色,帮助他们快速熟悉操作流程。 首先,我们看到布局文件中使用了一个`RelativeLayout`作为根布局,其中...
5. **布局设计**:为了实现LoadingView,你需要在启动界面的布局文件中添加自定义视图,并设置合适的大小和位置。布局可以是相对布局(RelativeLayout)、线性布局(LinearLayout)或其他适合的布局类型。 6. **...
2. **自定义View**:为了实现连连看的游戏逻辑,开发者可能创建了自定义View类,如`IdiomCellView`,扩展了`android.view.View`,并添加了点击事件处理、图形绘制等功能,使得每个成语方块可以被选择和消除。...
在Android应用开发中,界面设计是至关重要的一步,它直接影响到用户体验和应用的吸引力。"Android界面编写工具"就是专为简化这一过程而设计的,它可以帮助开发者快速、高效地创建出美观且易于操作的用户界面。下面...
在Android开发中,图形绘制是实现复杂用户界面和自定义视图的重要部分。"Android的graphics绘制了印章图像"这个示例项目展示了如何利用Android的图形API来创建一个印章图像。下面将详细介绍这个主题,包括Android...
这允许我们利用TextView的基本功能,并在其基础上添加自定义行为。 2. **重写onDraw()方法**: 要实现动态效果,我们需要重写`onDraw()`方法。这个方法在View需要绘制时被调用,是我们进行绘图操作的地方。在这里...
在Android开发中,实现控件在界面上自由拖动位置显示是一种常见的需求,可以提供更加灵活和用户友好的交互体验。本主题主要涉及的是如何在Android应用中创建一个自定义的拖动控件,允许用户自由调整控件在屏幕上的...
- **Canvas与Bitmap**:用于2D绘图,源码中可能通过Canvas在Bitmap上绘制游戏元素。 3. **用户交互** - **触摸事件处理**:Android的MotionEvent类用于处理用户的触摸事件,源码中会看到如何监听和响应触摸事件,...