在这个程序里面我没有调用ondraw()方法,那么为什么没法省略这个方法呢?

zrc 发布于 2013/02/26 22:25
阅读 335
收藏 0

//自定义的View组件



package com.example.user_defined_view;



import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;


public class RabbitView extends View {// 构造一个自定义View组件
private float bitmapX;
private float bitmapY;


public float getBitmapX() {
return bitmapX;
}


public void setBitmapX(float bitmapX) {
this.bitmapX = bitmapX;
}


public float getBitmapY() {
return bitmapY;
}


public void setBitmapY(float bitmapY) {
this.bitmapY = bitmapY;
}


public RabbitView(Context context) {
super(context);
bitmapX = 750;// 设置这个组件的初始位置
bitmapY = 500;
}


@Override
protected void onDraw(Canvas canvas) {
// TODO 自动生成的方法存根
super.onDraw(canvas);
Paint paint = new Paint();// 生成画笔
Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),
R.drawable.rabbit);// 将图片转化为位图 问:这里的THIS代表的是什么?
canvas.drawBitmap(bitmap, bitmapX, bitmapY, paint);// 在画布上用画笔画出转化过后的位图(表明了的位置,使用的组件的初始位置)


if (bitmap.isRecycled()) {//判断位图是否被系统回收
bitmap.recycle();//回收位图
}
}


}


//程序入口

package com.example.user_defined_view;


import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.FrameLayout;


public class MainActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FrameLayout framelayout = (FrameLayout) findViewById(R.id.mylayout);// 获取XML布局
final RabbitView rabbit = new RabbitView(MainActivity.this);// 实例化一个组建,传入参数,问:这个THIS是那个对象??
rabbit.setOnTouchListener(new OnTouchListener() {//为这个组件添加触摸监听


@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO 自动生成的方法存根
rabbit.setBitmapX(event.getX());
rabbit.setBitmapY(event.getY());
rabbit.invalidate();//重新绘制位图(刷新位图)
return true;
}
});
framelayout.addView(rabbit);//将组件添加到布局中去
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}


}



加载中
返回顶部
顶部