今晚搞android自定义View,遇到了一个小问题。。爬了半天帖子,才爬到。。现在在这记录下来
自定义view,有两种方式。。。。。。
1.先继承一个view---然后通过后台的draw方法给控件绘制前台效果。这个方法。对于我来说,有点操蛋。。我不太喜欢这个方式
2:继承view,然后用各种资源文件,layout文件,还有动画。。堆积成一个个控件,后台代码只要很少很少的东西就行 了。。。为什么要这样?因为这样写代码更爽。
第一步:写一个类,继承一个view-这里千万注意构造函数----不然会出错
package com.example.mycontrols; import android.content.Context; import android.util.AttributeSet; import android.widget.ListView; import android.widget.SimpleAdapter; import com.example.controlshelpers.R; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by li on 2016/3/14. */ public class Mylistview extends ListView { //构造函数 public Mylistview(Context context,AttributeSet paramAttributeSet) { super(context,paramAttributeSet); SimpleAdapter adapter = new SimpleAdapter(context, getData(), R.layout.mylistviewitem, new String[]{"title", "info", "img"}, new int[]{R.id.title, R.id.info, R.id.img}); this.setAdapter(adapter); } private List<Map<String, Object>> getData() { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("title", "G1"); map.put("info", "google 1"); map.put("img", R.drawable.image1); list.add(map); map = new HashMap<String, Object>(); map.put("title", "G2"); map.put("info", "google 2"); map.put("img", R.drawable.image2); list.add(map); map = new HashMap<String, Object>(); map.put("title", "G3"); map.put("info", "google 3"); map.put("img", R.drawable.image3); list.add(map); return list; } }
注意构造函数里的那个layout文件哦。。。这个文件在这里呢
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5px" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFFFFFFF" android:textSize="22px" /> <TextView android:id="@+id/info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFFFFFFF" android:textSize="13px" /> </LinearLayout> </LinearLayout>
好了。。。。这也,这个控件就完成了。。虽然布局什么的都很丑。。但是,原理出来了
最后一步,在另外一个工程里引用,是一个activity哦
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:custom="http://schemas.android.com/apk/res-auto" android:id="@+id/mainwindow" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" tools:context=".MainActivity"> <ImageView android:id="@+id/ivMore" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="fitXY" android:src="@drawable/backgroundimage" /> <RelativeLayout android:id="@+id/listParent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentLeft="true" android:layout_alignParentTop="true"> <com.example.mycontrols.Mylistview android:id="@+id/listMore" android:layout_width="256px" android:layout_height="fill_parent" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" /> </RelativeLayout> </RelativeLayout>