`
风雨静婷
  • 浏览: 5789 次
  • 性别: Icon_minigender_2
最近访客 更多访客>>
社区版块
存档分类
最新评论

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]
分享到:
评论

相关推荐

    android欢迎界面简单实现

    5. **控制显示与隐藏**:为了在适当的时候显示和隐藏欢迎界面,可以在`Activity`中添加一个标记变量,如`isContentLoaded`,当主界面加载完成时将其设置为`true`。然后在`onWindowFocusChanged()`方法中检查此变量,...

    android 实现 苹果数字锁屏界面

    在Android平台上,实现苹果风格的数字锁屏界面是一项有趣且具有挑战性的任务。这个项目旨在为Android设备提供与苹果iOS类似的锁屏体验,让用户能够通过输入预设的数字密码来解锁设备。以下是一些关键的知识点和实现...

    android绘制心电图

    在Android平台上开发医疗应用,尤其是涉及到生理数据可视化如心电图(ECG)的应用,是一项技术挑战。本项目提供了一个可以直接使用的示例,用于通过蓝牙接收心电仪数据并进行心电图绘制。以下是关于这一过程涉及的...

    android利用Paint在Canvas上实现竖排写字

    在Android开发中,Canvas是用于在屏幕上绘制图形和文本的核心组件。Paint对象则是用来设置绘制样式,如颜色、字体、线宽等。本教程将详细讲解如何利用Paint和Canvas在Android应用中实现在竖直方向上写字。 1. **...

    Android数字上下滚动(积分效果)

    "Android数字自动滚动效果"是一个常见的需求,它能让数字在界面上持续滚动,给人一种动态更新的感觉。本篇将深入探讨如何在Android应用中实现这种效果,以及如何解决运行时可能遇到的问题。 首先,要实现这个功能,...

    Android游戏源码不一样的拼图游戏源码.zip

    - **Bitmap和Canvas**:用于处理和绘制游戏中的图像,Bitmap存储图片数据,Canvas则用于在屏幕上绘制Bitmap。 - **动画框架**:可能使用Android的Animation API来实现图片交换的动画效果,增加用户体验。 4. **...

    android仿360界面实现

    360界面以其简洁、直观和用户友好的特点深受用户喜爱,因此在Android上实现这样的界面,需要掌握以下几个核心技术和设计原则: 1. **布局管理器(Layout Managers)**:Android提供多种布局管理器,如线性布局...

    基于Android Studio实现的2048小游戏源代码,安卓大作业

    这些功能通常会封装在自定义的`GameView`或`GameBoard`类中,它们继承自Android的`View`类,负责绘制游戏界面并处理用户交互。 1. **生成随机数字**:游戏开始时,会在棋盘的空位上随机生成2或4,这可以通过随机数...

    android 投篮游戏 源码

    Android 投篮游戏是一款基于Android平台的休闲娱乐应用,它通过模拟篮球投篮的场景,让用户在手机上体验投篮的乐趣。本项目源码提供了一个完整的开发实例,适合Android开发者进行学习和参考,以提升在游戏开发领域的...

    android 绘制电池监测电量(Canvas实现)

    Canvas是Android图形系统的核心,它提供了在Bitmap上进行绘制的基础工具。 首先,我们需要创建一个新的自定义View类,例如名为`BatteryView`,继承自`View`。在这个类中,我们将实现绘制电池的方法。下面是一些关键...

    android实现IPHONE界面

    在Android平台上实现类似iPhone的界面是一项技术挑战,但并非不可能。Android系统以其高度的可定制性和开放性,允许开发者通过自定义View来创造出各种各样的界面风格,包括模仿iPhone的UI设计。以下是一些关键的知识...

    动态游戏界面

    在安卓开发中,动态游戏界面的设计与实现是至关重要的,因为它是用户与游戏交互的窗口。游戏界面不仅要吸引玩家的注意力,还要提供直观的操作方式,确保游戏体验流畅且有趣。以下是一些关于创建动态游戏界面的关键...

    Android绘制炫酷的引导界面

    本文将详细介绍如何在Android平台上绘制炫酷的引导界面。引导界面通常用于向新用户介绍应用的主要功能或特色,帮助他们快速熟悉操作流程。 首先,我们看到布局文件中使用了一个`RelativeLayout`作为根布局,其中...

    启动界面实现LoadingView

    5. **布局设计**:为了实现LoadingView,你需要在启动界面的布局文件中添加自定义视图,并设置合适的大小和位置。布局可以是相对布局(RelativeLayout)、线性布局(LinearLayout)或其他适合的布局类型。 6. **...

    Android成语连连看游戏项目源代码

    2. **自定义View**:为了实现连连看的游戏逻辑,开发者可能创建了自定义View类,如`IdiomCellView`,扩展了`android.view.View`,并添加了点击事件处理、图形绘制等功能,使得每个成语方块可以被选择和消除。...

    android 界面编写工具

    在Android应用开发中,界面设计是至关重要的一步,它直接影响到用户体验和应用的吸引力。"Android界面编写工具"就是专为简化这一过程而设计的,它可以帮助开发者快速、高效地创建出美观且易于操作的用户界面。下面...

    Android的graphics绘制了印章图像

    在Android开发中,图形绘制是实现复杂用户界面和自定义视图的重要部分。"Android的graphics绘制了印章图像"这个示例项目展示了如何利用Android的图形API来创建一个印章图像。下面将详细介绍这个主题,包括Android...

    Android自定义TextView实现动态的文字效果

    这允许我们利用TextView的基本功能,并在其基础上添加自定义行为。 2. **重写onDraw()方法**: 要实现动态效果,我们需要重写`onDraw()`方法。这个方法在View需要绘制时被调用,是我们进行绘图操作的地方。在这里...

    android控件在界面上自由拖动位置显示

    在Android开发中,实现控件在界面上自由拖动位置显示是一种常见的需求,可以提供更加灵活和用户友好的交互体验。本主题主要涉及的是如何在Android应用中创建一个自定义的拖动控件,允许用户自由调整控件在屏幕上的...

    android 小游戏源码

    - **Canvas与Bitmap**:用于2D绘图,源码中可能通过Canvas在Bitmap上绘制游戏元素。 3. **用户交互** - **触摸事件处理**:Android的MotionEvent类用于处理用户的触摸事件,源码中会看到如何监听和响应触摸事件,...

Global site tag (gtag.js) - Google Analytics