创建自己的View类-移动的Picture

来源:互联网 发布:量化交易平台 python 编辑:程序博客网 时间:2024/05/21 09:42


   在安卓中,我们所用的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;}@Overrideprotected 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 {@Overrideprotected 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(){@Overridepublic boolean onTouch(View v, MotionEvent e) {// TODO 自动生成的方法存根picView.bitmapX = e.getX();picView.bitmapY = e.getY();//重新绘制图片picView.invalidate();return false;}});frameLayout.addView(picView);}@Overridepublic 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组件。