两部分,首先讲对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; } }