在安卓中,我们所用的UI组件一般都集成于基类android.view.View。在实际开发中,类库中的组件可能不能满足我们的需求,这时候就需要定义自己的View类了。
下面将会有一个实例:实现一个PicView类,用于显示一张图片,当触摸屏幕时,该图片就会出现在所触摸的地方。
首先,我们需要新建一个类,例如PicView,继承于android.view.View,重写onDraw()方法。
package com.example.movepic;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;
/**PicView类继承于android.view.View类
* 构造函数初始化对象的位置
* 重写onDraw函数显示图片*/
public class PicView extends View{
public float bitmapX;
public float bitmapY;
public PicView(Context context) {
super(context);
// TODO 自动生成的构造函数存根
bitmapX = 290;
bitmapY = 140;
}
@Override
protected void onDraw(Canvas c){
super.onDraw(c);
Paint paint = new Paint();
Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.p2);
c.drawBitmap(bitmap, bitmapX, bitmapY, paint);
//判断图片是否被回收
if(bitmap.isRecycled())
bitmap.recycle();
}
}
在MainActivity中新建PicView对象并设置监听事件。package com.example.movepic;
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);
/**构造帧布局管理器
* 新建PicView对象并初始化
* 设置该View对象的触摸监听事件
* 把该对象添加到布局管理器中*/
FrameLayout frameLayout = (FrameLayout)findViewById(R.id.FrameLayout1);
final PicView picView = new PicView(this);
picView.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent e) {
// TODO 自动生成的方法存根
picView.bitmapX = e.getX();
picView.bitmapY = e.getY();
//重新绘制图片
picView.invalidate();
return false;
}
});
frameLayout.addView(picView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
这样即可定义并应用自己的View组件。
本文介绍如何在安卓开发中创建自定义View组件,并通过一个PicView类的实例展示如何响应触摸事件来更新图片位置。
1万+

被折叠的 条评论
为什么被折叠?



