安卓自定义view_GDI绘图 _2d绘图_canvas绘图

时间:2022-12-11 06:39:03

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 的属性 和 方法..就可以完成很多效果了