安卓自定义view_GDI绘图 _2d绘图_canvas绘图
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 的属性 和 方法..就可以完成很多效果了
Rust编程语言群 1036955113
java新手自学群 626070845
java/springboot/hadoop/JVM 群 4915800
Hadoop/mongodb(搭建/开发/运维)Q群481975850
GOLang Q1群:6848027
GOLang Q2群:450509103
GOLang Q3群:436173132
GOLang Q4群:141984758
GOLang Q5群:215535604
C/C++/QT群 1414577
单片机嵌入式/电子电路入门群群 306312845
MUD/LIB/交流群 391486684
Electron/koa/Nodejs/express 214737701
大前端群vue/js/ts 165150391
操作系统研发群:15375777
汇编/辅助/破解新手群:755783453
大数据 elasticsearch 群 481975850
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
java新手自学群 626070845
java/springboot/hadoop/JVM 群 4915800
Hadoop/mongodb(搭建/开发/运维)Q群481975850
GOLang Q1群:6848027
GOLang Q2群:450509103
GOLang Q3群:436173132
GOLang Q4群:141984758
GOLang Q5群:215535604
C/C++/QT群 1414577
单片机嵌入式/电子电路入门群群 306312845
MUD/LIB/交流群 391486684
Electron/koa/Nodejs/express 214737701
大前端群vue/js/ts 165150391
操作系统研发群:15375777
汇编/辅助/破解新手群:755783453
大数据 elasticsearch 群 481975850
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。