两部分,首先讲对MVC的鄙见,再说明通过绘画View实现动画效果。
首先,对于Android,我的MVC的理解:MVC分别表示什么?M、V、C之间的关系?MVC的工作过程?
M:model 程序所要描述的实体。//数据
V:view 包含UI的表现层。
C:control 控制层
然后,绘图在MVC中的使用:
M:我们首先创建一个长方形实体。
V:主要有activity和layout文件完成。
创建layout布局文件
写一个画出长方形的继承View类的子类组件,嵌入到layout中。
在activity中view对象与长方形实体的联系(在View中声明实体对象)
C:通过activity自带的监听器控制长方形实体
示例代码:
MapActivity.java
package com.android.listview;
import com.android.entity.NewRect;
import com.android.view.NewView;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
public class MapActivity extends Activity {
protected static final int MSG_DOWN = 0;
NewView nv;
NewRect nr;
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if(msg.what == MSG_DOWN){
nv.invalidate();
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map_layout);
nv = (NewView) findViewById(R.id.newview);
nr= new NewRect();
nv.setRect(nr);
new InnerThread().start();
}
//当键被按下时
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_LEFT:
nr.setX(nr.getX() - 5);
Log.i("onKeyDown", "触发了左键");
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
nr.setX(nr.getX() + 5);
break;
}
nv.invalidate();
return super.onKeyDown(keyCode, event);
}
private class InnerThread extends Thread {
@Override
public void run() {
while(true) {
try {
Thread.sleep(1000);
nr.setY(nr.getY() + 3);
} catch (InterruptedException e) {
e.printStackTrace();
}
Message msg = new Message();
msg.what = MSG_DOWN;
handler.sendMessage(msg);
}
}
}
}
NewView.java
package com.android.view;
import com.android.entity.NewRect;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
public class NewView extends View {
private NewRect rect;
public void setRect(NewRect rect) {
this.rect = rect;
}
public NewView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO 自动生成的构造函数存根
}
@Override
protected void onDraw(Canvas canvas) {
// TODO 自动生成的方法存根
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(Color.rgb(255, 55, 55));
canvas.drawColor(Color.rgb(122,122 , 255));
canvas.drawRect(new Rect(rect.getX(), rect.getY(), rect.getX()+rect.getWidth(), rect.getY()+rect.getHeight()), paint);
}
}
NewRect.java
package com.android.entity;
public class NewRect {
public NewRect() {
}
private int x=0;
private int y=0;
private int width=80;
private int height=40;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
}