zoukankan      html  css  js  c++  java
  • 安卓开发_浅谈自定义组件

      在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>

    效果图:

  • 相关阅读:
    沟通的5个步骤
    安家博客园,发表感想
    postman 简单教程-实现简单的接口测试
    Postman的基本使用
    面试题-如何测试一个APP
    Fiddler快捷方式导出jmeter脚本,傻瓜式
    Servlet学习(三)
    scala学习(一)
    白底抠图
    Servlet学习(二)
  • 原文地址:https://www.cnblogs.com/xqxacm/p/4654798.html
Copyright © 2011-2022 走看看