listView布局自定义和数据填充,以及结合tabhost使用
1,tabhost定义选项
LayoutInflater.from(this).inflate(R.layout.pressure,
host.getTabContentView(), true);
// 加载tab选项字体布局
LayoutInflater inflater = this.getLayoutInflater();
View view1 = inflater.inflate(R.layout.tabview1, null);
View view2 = inflater.inflate(R.layout.tabview2, null);
View view3 = inflater.inflate(R.layout.tabview3, null);
View view4 = inflater.inflate(R.layout.tabview4, null);
View view5 = inflater.inflate(R.layout.tabview5, null);
View view6 = inflater.inflate(R.layout.tabview6, null);//自定义view填充到选项卡中,改变选项卡风格
host.addTab(host.newTabSpec("7days").setIndicator(view1)
.setContent(R.id.pressure));
host.addTab(host.newTabSpec("15days").setIndicator(view2)
.setContent(R.id.pressure));
host.addTab(host.newTabSpec("30days").setIndicator(view3)
.setContent(R.id.pressure));
host.addTab(host.newTabSpec("90days").setIndicator(view4)
.setContent(R.id.pressure));
host.addTab(host.newTabSpec("180days").setIndicator(view5)
.setContent(R.id.pressure));
host.addTab(host.newTabSpec("360days").setIndicator(view6)
.setContent(R.id.pressure));
setContentView(host);//设置host为主布局
2,在tabhost选项中设置一直线布局为为显示视图,而布局中填充,列表选项和一个listview
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/pressure">
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" android:orientation="horizontal">
<TextView android:layout_width="140dip" android:layout_height="wrap_content"
android:text="@string/tab1" android:textColor="@color/frontcolor"
android:textSize="20sp"/>
<TextView android:layout_width="150dip" android:layout_height="wrap_content"
android:text="@string/tab2" android:textColor="@color/frontcolor"
android:textSize="20sp"/>
<TextView android:layout_width="50dip" android:layout_height="wrap_content"
android:text="@string/tab3" android:textColor="@color/frontcolor"
android:textSize="20sp"/>
<TextView android:layout_width="150dip" android:layout_height="wrap_content"
android:text="@string/tab4" android:textColor="@color/frontcolor"
android:textSize="20sp"/>
<TextView android:layout_width="220dip" android:layout_height="wrap_content"
android:text="@string/tab5" android:textColor="@color/frontcolor"
android:textSize="20sp"/>
<TextView android:layout_width="120dip" android:layout_height="wrap_content"
android:text="@string/tab6" android:textColor="@color/frontcolor"
android:textSize="20sp"/>
</LinearLayout>
<ListView android:id="@+id/pressureData" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_weight="1" />
</LinearLayout>
tab选项卡中view视图布局
3,设置listview的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="horizontal">
<TextView android:id="@+id/tx1" android:layout_width="140dip"
android:layout_height="wrap_content" android:text=""
android:textColor="@color/white" android:textSize="20sp"/>
<TextView android:id="@+id/tx2" android:layout_width="150dip"
android:layout_height="wrap_content" android:text=""
android:textColor="@color/white" android:textSize="20sp"/>
<TextView android:id="@+id/tx3" android:layout_width="50dip"
android:layout_height="wrap_content" android:text=""
android:textColor="@color/white" android:textSize="20sp"/>
<TextView android:id="@+id/tx4" android:layout_width="150dip"
android:layout_height="wrap_content" android:text=""
android:textColor="@color/white" android:textSize="20sp"/>
<TextView android:id="@+id/tx5" android:layout_width="220dip"
android:layout_height="wrap_content" android:text=""
android:textColor="@color/white" android:textSize="20sp"/>
<TextView android:id="@+id/tx6" android:layout_width="120dip"
android:layout_height="wrap_content" android:text=""
android:textColor="@color/white" android:textSize="20sp"/>
</LinearLayout>
主视图下的一个listview中填充的小view
4,获取要填充的数据填充到listview中去
//自定义适配器
public class PressureAdapter extends BaseAdapter {
Context mContext;
JSONArray jsonObj;
public PressureAdapter(Context mContext, JSONArray jsonObj) {
super();
this.mContext = mContext;
this.jsonObj = jsonObj;
}
@Override
public int getCount() {
return jsonObj.length();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater mInflater = getLayoutInflater();
View view = mInflater.inflate(R.layout.pressure_data, null);
TextView tx1 = (TextView) view.findViewById(R.id.tx1);//获取listview布局中的view子项ID并且赋值
TextView tx2 = (TextView) view.findViewById(R.id.tx2);
TextView tx3 = (TextView) view.findViewById(R.id.tx3);
TextView tx4 = (TextView) view.findViewById(R.id.tx4);
TextView tx5 = (TextView) view.findViewById(R.id.tx5);
TextView tx6 = (TextView) view.findViewById(R.id.tx6);
try {
tx1.setText(jsonObj.getJSONObject(position).getString(
"systolic"));
tx2.setText(jsonObj.getJSONObject(position).getString(
"diastolic"));
tx3.setText(jsonObj.getJSONObject(position).getString("pulse"));
tx4.setText(jsonObj.getJSONObject(position).getString(
"bodyTemperature"));
tx5.setText(jsonObj.getJSONObject(position).getString(
"dateTime"));
tx6.setText(jsonObj.getJSONObject(position).getString("tcText"));
} catch (JSONException e) {
e.printStackTrace();
}
return view;
}
}
附带:
list = (ListView) findViewById(R.id.pressureData);
host.setCurrentTab(0); //设置当前被选中选项
list.setAdapter(createAdapter("7"));
host.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {//选项切换事件
if (host.getCurrentTab() == 0) {
list.setAdapter(createAdapter("7"));
}
if (host.getCurrentTab() == 1) {
list.setAdapter(createAdapter("15"));
}
if (host.getCurrentTab() == 2) {
list.setAdapter(createAdapter("30"));
}
if (host.getCurrentTab() == 3) {
list.setAdapter(createAdapter("90"));
}
if (host.getCurrentTab() == 4) {
list.setAdapter(createAdapter("180"));
}
if (host.getCurrentTab() == 5) {
list.setAdapter(createAdapter("360"));
}
}
});
类似launcher的多屏切换效果,看了launcher的源码后,
发现主要使用了Scroller类来实现屏幕滚动,
在sroller的构造函数中加一个加速器参数
inpl=new OvershootInterpolator();
this.scroller = new Scroller(context,inpl);
就有阻尼效果了。
关于源码,可以在google code上找到,实现屏幕切换的是Workspace.java类。
原文链接:http://www.android123.com.cn/kaifafaq/704.html
一、Bitmap转Drawable
Bitmap bm=xxx; //xxx根据你的情况获取
BitmapDrawable bd= new BitmapDrawable(getResource(), bm);
因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。
二、 Drawable转Bitmap
转成Bitmap对象后,可以将Drawable对象通过Android的SK库存成一个字节输出流,最终还可以保存成为jpg和png的文件。
Drawable d=xxx; //xxx根据自己的情况获取drawable
BitmapDrawable bd = (BitmapDrawable) d;
Bitmap bm = bd.getBitmap();
最终bm就是我们需要的Bitmap对象了。