当前位置: 代码迷 >> Android >> 【Android入门 9】通过绘画View实现动画效果
  详细解决方案

【Android入门 9】通过绘画View实现动画效果

热度:12   发布时间:2016-04-28 02:30:07.0
【Android入门 九】通过绘画View实现动画效果

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









  相关解决方案