Android自定义View 自定义组合控件

自定义组合控件:

以三国杀游戏武将为例,包括武将头像,血条,装备区

1.先定义该组合的XML文件布局

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="wrap_content"
 4     android:layout_height="wrap_content"
 5     android:orientation="horizontal" >
 6     <LinearLayout
 7         android:layout_width="wrap_content"
 8         android:layout_height="wrap_content"
 9         android:orientation="vertical"
10         >
11         <ImageView
12             android:id="@+id/touxiang"
13             android:layout_width="80dp"
14             android:layout_height="80dp"
15             android:maxWidth="80dp"
16             android:maxHeight="80dp"    
17             >
18         </ImageView>
19         <ImageView
20             android:id="@+id/blood"
21             android:layout_width="wrap_content"
22         android:layout_height="wrap_content"
23             android:maxWidth="80dp"
24             android:maxHeight="20dp"
25             >            
26         </ImageView>
27         
28     </LinearLayout>
29     
30     <LinearLayout
31         android:layout_width="wrap_content"
32         android:layout_height="wrap_content"
33         android:orientation="vertical"
34         android:layout_gravity="center_vertical"
35         >
36         <TextView
37             android:layout_width="wrap_content"
38             android:layout_height="wrap_content"
39             android:text="武器"
40             ></TextView>
41         <TextView
42             android:layout_width="wrap_content"
43             android:layout_height="wrap_content"
44             android:text="防具"
45             ></TextView>
46         <TextView
47             android:layout_width="wrap_content"
48             android:layout_height="wrap_content"
49             android:text="+1马"
50             ></TextView>
51         <TextView
52             android:layout_width="wrap_content"
53             android:layout_height="wrap_content"
54             android:text="-1马"
55             ></TextView>
56     </LinearLayout>
57 
58 </LinearLayout>

2.自定义一个继承布局的类 

public class GeneralFrame extends LinearLayout {

    ImageView general;
    ImageView blood;
    TextView wuqi;
    TextView fangju;
    TextView jiayima;
    TextView jianyima;
    public GeneralFrame(Context context) {
        //super(context);
        // TODO Auto-generated constructor stub
        this(context,null);
    }
    public GeneralFrame(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
          //在构造函数中将Xml中定义的布局解析出来。   
        LayoutInflater.from(context).inflate(R.layout.generalframe, this, true);  
        general=(ImageView)findViewById(R.id.touxiang);
        blood=(ImageView)findViewById(R.id.blood);
        blood.setImageResource(R.drawable.blood);
        //wuqi=(TextView)findViewById(R.id
    }

可在XML文件里调用该类

 < com.layouts.uitest.GeneralFrame
     android:layout_height="wrap_content"
      android:layout_width="wrap_content"
/>

也可以在代码中动态添加该类

GeneralFrame general=new GeneralFrame(this);
general.setGeneralImage(R.drawable.diaochan);
linear2.addView(general);

自定义View.

自定义类继承View 

public class MyView extends View
{
  
   public MyView (Context c,AttributeSet set)
  {
   }
   @Override
   public void onDraw(Canvas canvas)
  {
     
   }  
}

调用方法同自定义控件一样。

自定义View的构造方法一定要选中 public MyView (Context c,AttributeSet set),系统会回调该构造方法



原文地址:https://www.cnblogs.com/cschen/p/3133985.html