android 浅复制和深复制-clone篇
来源:互联网 发布:学唇语 唇唇欲动软件 编辑:程序博客网 时间:2024/06/06 06:54
有关java中的 浅复制和深复制浅复制和深复制http://blog.csdn.net/yang_hui1986527/article/details/7029777
CloneView.java
Document.java
Object.java
TextBox.java
,这里不详细讨论。相关知识请参考以下帖子:
浅复制和深复制http://blog.csdn.net/yang_hui1986527/article/details/7029777
浅析Java中的深拷贝与浅拷贝http://blog.csdn.net/yang_hui1986527/article/details/7012428
android中的 浅复制和深复制,具体可能于java中的有一点不同。下面,我们来探讨下在这个问题。
主要思路:
1、创建TextBox,然后根据TextBox复制出一个对象TextBox2(点击屏幕,进行复制);
2、改变TextBox2的位置,方便观察比较差异。
3、改变TextBox2内部文本的位置。如果是浅复制,那么TextBox2内部文本改变位置的同时,TextBox内部文本的位置会随着改变。否则,如果是深度复制,TextBox内部文本的位置不会改变。
效果如下:
注:请注意文本“test”在文本框内的位置。
浅复制:
深复制:
源程序:
(点击下载:http://download.csdn.net/detail/yang_hui1986527/3874905)
CloneActivity.java
package com.clone;import android.app.Activity;import android.os.Bundle;public class CloneActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.main); CloneView mCloneView = new CloneView(this); setContentView(mCloneView); }}
CloneView.java
package com.clone;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.PointF;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;public class CloneView extends View {private Document mDocument = null;public Paint mPaint= null;public TextBox mTextBox = null;public TextBox mTextBox2 = null;public CloneView(Context context) {super(context);mDocument = new Document();mPaint = new Paint();initData();}public CloneView(Context context, AttributeSet attrs) {super(context, attrs);mDocument = new Document();mPaint = new Paint();initData();}public CloneView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);mDocument = new Document();}public void initData(){PointF textpos = new PointF(30,30);String text = new String("test");mTextBox = new TextBox(50, 50, 100, 100, textpos, text);mDocument.add(mTextBox);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawColor(Color.WHITE);mDocument.draw(canvas, mPaint);}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:{try {mTextBox2 = (TextBox)mTextBox.clone();mTextBox2.moveBound();mTextBox2.changeData();} catch (CloneNotSupportedException e) {e.printStackTrace();}if(mTextBox2 != null)mDocument.add(mTextBox2);}invalidate();break;case MotionEvent.ACTION_MOVE:break;case MotionEvent.ACTION_UP:break;default:break;}return super.onTouchEvent(event);}}
Document.java
package com.clone;import java.util.Vector;import android.graphics.Canvas;import android.graphics.Paint;public class Document {private Vector<Object> objs = null;public Document() {objs = new Vector<Object>();}public void add(Object obj){objs.add(obj);}void draw(Canvas canvas, Paint paint) {canvas.save();for (int i = 0; i < objs.size(); i++) {Object obj = objs.get(i);obj.draw(canvas, paint);}canvas.restore();}}
Object.java
package com.clone;import android.graphics.Canvas;import android.graphics.Paint;public abstract class Object implements Cloneable{protected float posx = 0;protected float posy =0;protected float width = 0;protected float height = 0;public Object() {posx = 0;posy =0;width = 0;height = 0;}public Object(float posx,float posy,float width,float height){this.posx = posx;this.posy = posy;this.width = width;this.height = height;}public void moveBound() {this.posx += 100;this.posy += 100;}abstract void draw(Canvas canvas,Paint paint);abstract void changeData(); public Object clone() throws CloneNotSupportedException { return (Object) super.clone(); } }
TextBox.java
package com.clone;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.PointF;public class TextBox extends Object implements Cloneable{private PointF mtextpos = null;private String mtextString = null;public TextBox() {posx = 0;posy =0;width = 0;height = 0;mtextpos = new PointF();mtextString = new String();}public TextBox(float posx, float posy, float width, float height,PointF textpos,String text) {this.posx = posx;this.posy = posy;this.width = width;this.height = height;mtextpos = new PointF(textpos.x,textpos.y);mtextString = new String(text);}@Overridevoid draw(Canvas canvas, Paint paint) {canvas.save();paint.setColor(Color.BLUE);paint.setStyle(Style.STROKE);canvas.drawRect(posx, posy, posx+width, posy+height, paint);canvas.translate(posx, posy);paint.setColor(Color.BLACK);paint.setTextSize(20);canvas.drawText(mtextString, mtextpos.x, mtextpos.y, paint);canvas.restore();}//////浅克隆// public TextBox clone() throws CloneNotSupportedException { // return (TextBox) super.clone(); // } //深克隆 public TextBox clone() throws CloneNotSupportedException { TextBox o = (TextBox) super.clone(); //对于string,int等基本类型,用上面一句就可以 //对于复杂类型,例如PointF等还需要手动实现拷贝 if(mtextpos != null) o.mtextpos = new PointF(mtextpos.x,mtextpos.y); return o; }@Overridevoid changeData() { if(mtextpos != null) mtextpos.offset(20, 50);} }
- android 浅复制和深复制-clone篇
- 深复制和浅复制(clone)
- PHP Clone 深复制和浅复制
- clone()方法、深复制和浅复制
- 复制对象clone(深复制和浅复制)
- 浅复制 深复制 clone
- java clone 中的浅复制和深复制
- 浅复制和深复制 clone()的使用
- java中的clone:深复制和浅复制
- Java中Clone方法的浅复制和深复制
- clone方法的深复制和浅复制
- Java中clone方法以及深复制和浅复制
- Java Object的clone方法浅复制和深复制
- java中的clone(深复制和浅复制)
- 浅复制和深度复制 clone()
- 浅复制和深度复制 clone()
- Java浅复制和深度复制 clone()
- clone()方法(浅复制、深复制)
- vxworks6.6 windml键盘扫描码识别过程
- MAC OS动态链接库的搜索路径
- 参加“2011赢在淘宝”的作品 拿出来给大家把玩
- ERP总结系列(BOM浅谈)
- C语言那些小事--sizeof补齐
- android 浅复制和深复制-clone篇
- 关于编码,资深大牛写的,通俗易懂
- rootkit技术之IoCallDriver介绍
- cocos2d-x 0.9.2 ccmenu bug
- 名人面谈语录
- 大数相加算法的实现
- Android MediaPlayer基本知识
- gdb的简单使用和gdb+gdbserver方式进行ARM程序调试
- win7中如何添加快速启动栏?