现在的位置: 首页 > 移动开发 > 正文

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

2019年06月03日 移动开发 ⁄ 共 2686字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.