您的位置:首页 > 其它

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

2016-01-22 03:49 274 查看

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 的属性 和 方法..就可以完成很多效果了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: