2014年到2016年 发生了很多事情,如今已成定局,现在想忘掉这些烦恼的事情,找点以前想干没有干的事情来做,塞满大脑就不去想了。
之前,一直想做一款挂机类游戏,各种平台和开发语言都选择过了,从html5到C,C++,C#,unity3d各种小demo写了不少,最后还是选择了安卓平台来做....

网上看了很多列子,关于自定义view的也就是类似于WIN 下用SDK 开发窗体了,发现安卓上实现这些很绕,那些列子都是要去继承那个什么surfaceview 一大堆乱七八糟的东西..

在WIN下做开发很多年 习惯了WIN下的思维 不习惯那样搞 于是有了下面的代码

package com.example.test;

import java.io.IOException;

import android.os.Bundle;
import android.os.Message;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.os.Handler; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) { this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
// 隐去电池等图标和一切修饰部分(状态栏部分)
this.requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); final MyView my = new MyView(this); setContentView(my); final Handler handler = new Handler() {
public void handleMessage(Message message) {
if (message.what == 0x123) {
my.invalidate();
}
}
}; Thread r = new Thread() {
public void run() {
while (true) { handler.sendEmptyMessage(0x123);
} }
}; // Thread t = new Thread(r);
r.start(); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }
package com.example.test;

import java.io.IOException;
import java.io.InputStream; import android.content.Context; import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.Rect;
import android.graphics.RectF; import android.os.Handler;
import android.os.Message;
import android.util.Log; import android.view.View; import android.widget.Button;
import android.content.res.Resources;
import android.content.res.Resources.Theme; public class MyView extends View { private Bitmap bmp;
private Bitmap bmp2;
private int ofs = 5;
private Paint paint; public MyView(Context context) {
super(context); Resources res = this.getResources();
InputStream is = null;
try {
is = getResources().getAssets().open("bg.png");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
bmp = BitmapFactory.decodeStream(is);
bmp2 = BitmapFactory.decodeResource(res, R.drawable.ic_launcher); } public void draw(Canvas canvas) {
try {
canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
// canvas.drawPaint(null);
canvas.drawBitmap(bmp, 0, 0, null);
canvas.drawBitmap(bmp2, ofs, 0, null); // canvas.drawText(ofs, 100, 100, paint);// 画文字文本 ofs++;
} catch (Exception e) {
Log.i(e.getMessage().toString(), null);
// TODO: handle exception
} } }

更新::

之前的思路是把继承于view的类作为画布,存在的问题是什么呢?不能在这个view画布中添加button控件 因为 button也是集成于view

改下思路

Activity 舞台

继承于view的类为精灵

按照这个思路百度下 view 的属性 和 方法..就可以完成很多效果了

安卓自定义view_GDI绘图 _2d绘图_canvas绘图的更多相关文章

  1. Matlab绘图系列之高级绘图

    Matlab绘图系列之高级绘图 原帖地址: http://blog.163.com/enjoy_world/blog/static/115033832007865616218/ Matlab绘图 20 ...

  2. WebGL是一种3D绘图标准,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起

    WebGL是一种3D绘图标准,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTM ...

  3. QT_8_Qt中的事件处理_定时器事件_定时器类_事件分发器_事件过滤器_绘图事件_高级绘图事件_绘图设备_QFile 文件读写_QFileInfo文件信息

    Qt中的事件处理 1.1. 捕获QLabel中是鼠标事件 1.2. enterevent 鼠标进入 1.3. leaveevent 鼠标离开 1.4. 鼠标按下MyLabel::mousePressE ...

  4. 安卓自定义日期控件(仿QQ,IOS7)

    还记得上篇:高大上的安卓日期时间选择器,本篇是根据上篇修改而来,先看下qq中日期选择的效果: 鉴于目前还没有相似的开源日期控件,因此本人花费了一些时间修改了下之前的日期控件,效果如图: 虽说相似度不是 ...

  5. 安卓自定义View教程目录

    基础篇 安卓自定义View基础 - 坐标系 安卓自定义View基础 - 角度弧度 安卓自定义View基础 - 颜色 进阶篇 安卓自定义View进阶 - 分类和流程 安卓自定义View进阶 - Canv ...

  6. 安卓自定义View进阶-Canvas之画布操作 转载

    安卓自定义View进阶-Canvas之画布操作 转载 https://www.gcssloop.com/customview/Canvas_Convert 本来想把画布操作放到后面部分的,但是发现很多 ...

  7. android 加载自定义图片并在图片上绘图

    来源:毕设 关键词:Bitmap Canvas //毕设中需要自定义室内地图,并且在地图上绘制轨迹 //此处是一个测试Demo,实现图片的加载和记录手指在屏幕上的运动轨迹 图片的载入 使用系统提供的内 ...

  8. Emgu 学习(3) 绘图,使用鼠标绘图,使用trackbar

    绘图 class Program { static void Main(String[] args) { Mat img = , , DepthType.Cv8U, ); img.SetTo(, , ...

  9. 安卓自定义View实现钟表

    转载请注明出处:http://blog.csdn.net/baiyuliang2013/article/details/45535227 之前实现过html5版的钟表,html5也有一个画板属性Can ...

随机推荐

  1. c++中,保证头文件只被编译一次,避免多重包含的方法

    保证头文件只被编译一次 #pragma once这是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次. #pragma once是编译器相关的,有的编译器支 ...

  2. SQL 语句整理

    1.       /*  SQL CASE 语句写法 * SELECT TABLE1.USER_ID, TABLE1.COMP_CODE, TABLE1.DEPT_CODE, TABLE1.USER_ ...

  3. ES6笔记② 箭头函数

    特性介绍 箭头函数是ES6新增的特性之一,它为JS这门语言提供了一种全新的书写函数的语法. //ES5 function fun(x,y){ return x+y; } console.log(fun ...

  4. QT正则表达式

    QT正则表达式有一个问题,当初始状态是不符合正则表达式时,能够输入任意字符,若在输入过程中符合正则表达式,马上进入字符检测状态,即只能接受符合正则表达式的字符.

  5. php消息队列

    Memcache 一般用于缓存服务.但是很多时候,比如一个消息广播系统,需要一个消息队列.直接从数据库取消息,负载往往不行.如果将整个消息队列用一个key缓存到memcache里面.对于一个很大的消息 ...

  6. Android RadioGroup/RadioButton

    RadioGroup      RadioButton的集合,提供多选一的机制      属性:   android:orientation="horizontal/vertical&quo ...

  7. nodeJs入门笔记(一)

    node将"HTTP服务器"这一层抽离,直接面向浏览器用户 如PHP运行之前先要配置一个功能强大而复杂的HTTP 服务器,譬如Apache.IIS 或Nginx,还需要将PHP 配 ...

  8. QT5的中文路径和目录问题小记

    今天重新整理了磁盘文件后 使用qt发现编译不过 提示找不到工程的pro文件 原因:我把原来的qt工作目录删掉了 导致qt默认找“我的文档” 作为工作目录 而中文路径导致了这个问题,MARK之 /// ...

  9. 给进程分配cpu核心

    新负责的程序采用生产者和消费者的模式,生产者的速度非常快,数据几乎都在内存里,处理起来很快.而消费者要频繁的I/O.所以打算给生产者和消费者分配不一样的核心. 生产者只需要一个核心就够了,其余分配给消 ...

  10. SQL Server MYSQL 检查点的好处

    执行检查点时: 如果一个事务不没有提交.日志缓存还是会被更新到磁盘上的物理文件. 这样做就使得大事务commit 时也特别快!