android自定义view(一)

来源:互联网 发布:2位数的vip域名 编辑:程序博客网 时间:2024/06/05 06:12

第一种方式


1  先创建这样一个自定义控件

public class CustomView extends View {
Paint paint;
public CustomView(Context context) {
super(context);
init(context,null);
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
System.out.println("两个参数的构造函数");
init(context,attrs);
}
public CustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context,attrs);
}
private void init(Context context, AttributeSet attrs) {
paint = new Paint();
paint.setColor(Color.RED);
paint.setTextSize(25.0f);

}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

canvas.drawText("一个view里面画出来的一句话", 11, 111, paint);
}


@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}


}


2 在布局中取加载它

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"
    xmlns:dl="http://schemas.android.com/apk/res/cn.itheima.customview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
    <!-- dl中可用的属性为在attr.xml中定义的属性 -->
    <cn.itheima.customview.CustomView  //  这个就是一个类似button的控件了
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        dl:textColor="#ff00ff00"
        dl:textSize="25dip" >
    </cn.itheima.customview.CustomView>

</LinearLayout>


3  加载这个布局就好了 

//布局文件中使用了自定义控件
public class CustomViewActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}


第二种方式

1 线创建个View类

public class MainView extends FrameLayout implements View.OnClickListener{
  private Context mContext;  
      
   private Activity mActivity;  
   private Button mArgButton;  
   private Button mGlobleButton;  
   private Button mExitButton;  
     
   public MainView(Context context){  
       super(context);// ?????????  这句话的作用
       setupViews();  
   }  
 
   public MainView(Context context, AttributeSet attrs) {  
       super(context, attrs);  
       setupViews();  
   }  
     
     
   private void setupViews(){  
       //获取View的上下文.  
       mContext = getContext(); 
       //1   利用了多态的特性
       //这里将Context转换为Activity. 。 
       mActivity = (Activity)mContext; 
       
       // 2  动态添加布局文件
       LayoutInflater inflater = LayoutInflater.from(mContext);  
       View v = inflater.inflate(R.layout.activity_main, null);  
       addView(v)
;   // add View()
       
       // 3   多个button监听一个事件
       mArgButton = (Button)v.findViewById(R.id.arg_button);  
       mGlobleButton = (Button)v.findViewById(R.id.glo_button);  
       mExitButton = (Button)v.findViewById(R.id.exit_button);  
         
       mArgButton.setOnClickListener(this);  
       mGlobleButton.setOnClickListener(this);  
       mExitButton.setOnClickListener(this);  
   }  
 
   public void onClick(View v) {  
       if(v == mArgButton){  
           ToolUtils.showToast(mContext, "我是通过传递Context参数显示的!");  
       }else if(v == mGlobleButton){  
           ToolUtils.showToast("我是通过全局Context显示的!");  
       }else{  
           mActivity.finish();  
       }  
   }  
}


2  在activity中加载这个View

public class ApplicationDemoActivity extends Activity {  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
         // 1 创建自定义的视图  传递上下文。2 在构造函数中调用设置视图的方法
        MainView mMainView = new MainView(this);  
        setContentView(mMainView);  
    }  
      

原创粉丝点击