开发自定义View
来源:互联网 发布:羡慕别人知乎 编辑:程序博客网 时间:2024/06/01 09:02
开发自定义View
在Android中,所有的UI界面都是由View类和ViewGroup类及其子类组合而成的。其中,View类是所有UI组件的基类,而ViewGroup类是容纳这些UI组件的容器,其本身也是View类的子类,在ViewGroup类中,除了可以包含普通的View类外,还可以再次包含ViewGroup类。
一般情况下,开发Android应用程序的UI界面,都不直接使用View和ViewGroup类,而是使用这两个类的子类。例如,要显示一张图片,就可以使用View类的子类ImageView。虽然安卓提供了很多继承View类的UI组件,但在实际开发时,依然会出现不足以满足程序需要的情况。此时用户就可以通过继承View类来开发自己的组件
开发自定义的View组件大致分为以下3个步骤。
1.创建一个继承android.view.View类的View类,并且重写构造方法
2.根据需要重写相应的方法。
public class MyRobot extends 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 MyRobot(Context context) { super(context); bitmapX = 300; bitmapY = 300; } @Override protected void onDraw(Canvas canvas) { Log.e("MyRobot", "onDraw被调用了"); super.onDraw(canvas); // [1] 创建画笔 Paint paint = new Paint(); // [2] 解析资源文件生成Bitmap对象 Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.ic_launcher); // [3] 绘制图像 canvas.drawBitmap(bitmap, bitmapX, bitmapY, paint); if (bitmap.isRecycled()) { // 回收资源 bitmap.recycle(); } }} @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 关联布局文件 setContentView(R.layout.activity_main); mFrameLayout = (FrameLayout) findViewById(R.id.myLayout); // 创建自定义对象 myRobot = new MyRobot(MainActivity.this); // 将其加入布局中,如果是要在XML使用则重写两个参数的构造方法 mFrameLayout.addView(myRobot); // 设置触摸监听事件 myRobot.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { myRobot.setBitmapX(event.getX()); myRobot.setBitmapY(event.getY()); // 刷新画布 myRobot.invalidate(); return true; } }); }
0 0
- 开发自定义的View
- Android开发自定义View
- 开发自定义View
- 开发自定义View
- 开发自定义的view
- Android 开发自定义View
- 开发自定义的View
- 开发自定义的View
- Android开发: View - 自定义
- 开发自定义View
- Android开发自定义View
- Android 自定义 View 开发
- 开发常用自定义View
- 开发自定义View 数字键盘
- iOS开发之自定义View
- iOS开发之自定义View
- iOS开发之自定义View
- 【Android开发学习】自定义View
- 四、Linux--管道
- Oracle12c(PDB中) ORA-01017: invalid username/password; logon denied
- Oracle,day2,基础
- SVN 被锁定解决办法!!!
- 实现在eclipse中编译ns-3的详细步骤
- 开发自定义View
- Unreal Engine 4 C++ UMG自定义控件
- 五、Linux--信号量
- linux编程下signal()函数
- 【Java学习之代码学习】 Prog11_三数排序问题
- 算法 tire树
- spring配置文件读取jdbc.properties的配置信息
- Hibernate3.3(1)
- 六、Linux--共享存储