在Android中,所有的UI界面都是由View类和ViewGroup类及其子类组合而成。其中,View类是所有UI组件的基类,而ViewGroup类是容纳这些UI组件的容器。
其本身也是View类的子类。
在实际开发中,View类还不足以满足程序所有的需求。这时,便可以通过继承View类来开发自己的组件。
开发自定义组件的步骤:
1、创建一个继承android.view.View类的View类,并且重写构造方法。
2、根据需要重写相应的方法。
3、创建并实例化自定义View类,并将其添加到布局管理器中。
现在来学习使用自定义类
1、首先创建一个java文件来绘制图片
1 package myview; 2 3 import com.example.allcode.R; 4 5 import android.content.Context; 6 import android.graphics.Bitmap; 7 import android.graphics.BitmapFactory; 8 import android.graphics.Canvas; 9 import android.graphics.Paint; 10 import android.view.View; 11 12 public class MyView extends View{ 13 14 public float bitmipx; 15 public float bitmipy; 16 17 public MyView(Context context) { 18 super(context); 19 bitmipx=550; 20 bitmipy=550; 21 // TODO Auto-generated constructor stub 22 } 23 24 @Override 25 protected void onDraw(Canvas canvas) { 26 // TODO Auto-generated method stub 27 28 super.onDraw(canvas); 29 //创建并实例化Paint对象 30 Paint paint = new Paint(); 31 //根据图片生成位图对象 32 Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.image_equip_baibao_baicaodan); 33 canvas.drawBitmap(bitmap, bitmipx,bitmipy, paint); //绘制图片 34 if(bitmap.isRecycled()) //判断图片是否可以回收 35 { 36 bitmap.recycle(); //强制回收图片 37 } 38 39 } 40 41 }
2、在主activity中实例化图片,并添加触摸事件
1 package myview; 2 3 import com.example.allcode.R; 4 5 import android.app.Activity; 6 import android.os.Bundle; 7 import android.provider.ContactsContract.CommonDataKinds.Event; 8 import android.view.MotionEvent; 9 import android.view.View; 10 import android.view.View.OnTouchListener; 11 import android.widget.FrameLayout; 12 13 public class ShowMyView extends Activity{ 14 @Override 15 protected void onCreate(Bundle savedInstanceState) { 16 // TODO Auto-generated method stub 17 super.onCreate(savedInstanceState); 18 setContentView(R.layout.showmyview); 19 FrameLayout framelayout = (FrameLayout) findViewById(R.id.showview); 20 final MyView myview = new MyView(ShowMyView.this); //创建并示例化MyView类 21 22 //添加触摸事件 23 myview.setOnTouchListener(new OnTouchListener() { 24 25 @Override 26 public boolean onTouch(View v, MotionEvent event) { 27 // TODO Auto-generated method stub 28 myview.bitmipx=event.getX(); 29 myview.bitmipy=event.getY(); 30 myview.invalidate();//重绘自定义组件 31 return true; 32 } 33 }); 34 framelayout.addView(myview); 35 36 } 37 }
对应的布局文件
1 <?xml version="1.0" encoding="utf-8"?> 2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:id="@+id/showview" //不要忘记这一行 6 > 7 </FrameLayout>
效果图:
时间: 2024-10-11 13:00:52