当前位置: 代码迷 >> Android >> Android开发03—Android常用基本控件(上)
  详细解决方案

Android开发03—Android常用基本控件(上)

热度:22   发布时间:2016-05-01 16:55:02.0
Android开发03—Android常用基本控件(下)
Android开发03—Android常用基本控件(下)



1. 单选按钮和复选按钮
CheckBox和RadioButton控件都只有选中和未选中两种状态,不同的是RadioButton是单选按钮,需要便知道RadioGroup中,同一时刻一个RadioGroup中只能有一个按钮处于选中状态。

使用举例:
public class SampleDemo extends Activity{	public void onCreate(Bundle savedInstanceState){		super.onCreate(savedInstatceState);		setContentView(R.layout.main);		CheckBox cb = (CheckBox) findViewById(R.id.CheckBox1);		cb.setOnCheckedChangeListener(new OnCheckedChangeListener(){						public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){								setBulbState(isChecked);													}		});		RadioButton rb = (RadioButton) findViewById(R.id.off);		rb.setOnCheckedChangeListener(new OnCheckedChangeListener(){						public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){								setBulbState(isChecked);																		}		});	}	public void setBulbState(boolean state){		ImageView iv = (ImageView) findViewById(R.id.ImageView01);		iv.setImageResource((state)?R.drawable.bulb_on:R.drawable.bulb_off);		CheckBox cb = (CheckBox) this.findViewById(R.id.CheckBox1);		cb.setText((state)?R.string.off:R.string.on);		cb.setChecked(state);		RadioButton rb = (RadioButton) this.findViewById(R.id.off);		rb.setChecked(state);		rb = (RadioButton) findViewById(R.id.on);		rb.setChecked(state);		}}
2. 图片控件
ImageView控件负责显示图片,其图片的来源既可以是资源文件的id,也可以是Drawable对象或BitMap对象,还可以是ContentProvider的Uri。

实例:ImageView的用法
string.xml
	<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">AbsoluteExample</string>    <string name="next">下一张</string>    <string name="previous">上一张</string>    <string name="alpha_plus">透明度增加</string>    <string name="alpha_minus">透明度减少</string></resources>
main.xml
<?xml version="1.0" encoding="utf-8"?>    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical">        <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/iv" android:layout_gravity="center_horizontal" android:src="@drawable/pic1" ></ImageView>        <LinearLayout android:layout_height="wrap_content" android:id="@+id/linearLayout2" android:layout_gravity="center_horizontal" android:layout_width="fill_parent" android:orientation="horizontal">            <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/previous" android:text="@string/previous" android:gravity="center_horizontal" android:layout_gravity="center_horizontal"></Button>            <Button android:layout_height="wrap_content" android:id="@+id/alpha_plus" android:layout_width="wrap_content" android:text="@string/alpha_plus" android:gravity="center_horizontal" android:layout_gravity="center_horizontal"></Button>            <Button android:layout_height="wrap_content" android:id="@+id/alpha_minus" android:layout_width="wrap_content" android:text="@string/alpha_minus" android:gravity="center_horizontal" android:layout_gravity="center_horizontal"></Button>            <Button android:layout_height="wrap_content" android:id="@+id/next" android:layout_width="wrap_content" android:text="@string/next" android:gravity="center_horizontal" android:layout_gravity="center_horizontal"></Button>        </LinearLayout>    </LinearLayout>

Activity部分代码:
import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;public class MyAndroidProject extends Activity {	ImageView iv;	Button btnNext;	Button btnPrevious;	Button btnAlphaPlus;	Button btnAlphaMinus;	int currImgId = 0;	int alpha = 255;	int[] imgId ={			R.drawable.pic1,			R.drawable.pic2,			R.drawable.pic3	};	private View.OnClickListener myListener = new View.OnClickListener() {				public void onClick(View v) {			// TODO Auto-generated method stub			if(v == btnNext){				currImgId = (currImgId+1) %imgId.length;				iv.setImageResource(imgId[currImgId]);			}			else if(v == btnPrevious){				currImgId = (currImgId-1+imgId.length) %imgId.length;				iv.setImageResource(imgId[currImgId]);			}			else if(v == btnAlphaPlus){				alpha -= 25;				if(alpha < 0){					alpha = 0;				}				iv.setAlpha(alpha);			}			else if(v == btnAlphaMinus){				alpha +=25;				if(alpha >255){					alpha = 255;				}				iv.setAlpha(alpha);			}		}	};	/** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);           setContentView(R.layout.main);        iv = (ImageView) findViewById(R.id.iv);        btnNext = (Button) findViewById(R.id.next);        btnPrevious = (Button) findViewById(R.id.previous);        btnAlphaPlus = (Button) findViewById(R.id.alpha_plus);        btnAlphaMinus = (Button) findViewById(R.id.alpha_minus);                btnNext.setOnClickListener(myListener);        btnPrevious.setOnClickListener(myListener);        btnAlphaPlus.setOnClickListener(myListener);        btnAlphaMinus.setOnClickListener(myListener);       }}

3. 时钟控件
AnalogClock和DigitalClock都负责显示时钟,所不同的是AnalogClock控件显示模拟时钟,且只显示时针和分针,而digital显示数字时钟,可精确到秒
直接在main.xml中定义时钟控件即可。


4. 日期与时间选择控件
DatePicker继承自FrameLayout类,主要功能是向用户提供包含年,月,日的日期数据,并允许用户进行选择。如果要捕获用户修改日期选择控件中数据的时间,需要为DatePicker添加onDateChangedListener监听器。
TimePicker同样继承自FrameLayout类。时间选择控件向用户显示一天中的时间,并允许用户进行选择,如果要捕获用户修改时间数据的时间,便需要为TimePicker添加OnTimeChangedListener监听器。

案例:
main.xml
	<?xml version="1.0" encoding="utf-8"?>    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearLayout1" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">        <DatePicker android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/datePicker1"></DatePicker>        <EditText android:layout_height="wrap_content" android:text="EditText" android:layout_width="fill_parent" android:id="@+id/editText1" android:cursorVisible="false" android:editable="false"></EditText>        <TimePicker android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/timePicker1" android:layout_gravity="center_horizontal"></TimePicker>        <EditText android:layout_height="wrap_content" android:text="EditText" android:layout_width="fill_parent" android:id="@+id/editText2" android:cursorVisible="false" android:editable="false"></EditText>    </LinearLayout>


Activity:
package qijia.si;import java.util.Calendar;import android.app.Activity;import android.os.Bundle;import android.widget.DatePicker;import android.widget.EditText;import android.widget.DatePicker.OnDateChangedListener;import android.widget.TimePicker;import android.widget.TimePicker.OnTimeChangedListener;public class MyAndroidProject extends Activity {					/** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);           setContentView(R.layout.main);        DatePicker dp = (DatePicker) findViewById(R.id.datePicker1);        TimePicker tp = (TimePicker) findViewById(R.id.timePicker1);                Calendar c = Calendar.getInstance();        int year = c.get(Calendar.YEAR);        int monthOfYear = c.get(Calendar.MONTH);        int dayOfMonth = c.get(Calendar.DAY_OF_MONTH);                dp.init(year, monthOfYear, dayOfMonth, new OnDateChangedListener(){        			public void onDateChanged(DatePicker view,int year, int monthOfYear,int dayOfMonth){        				flushDate(year,monthOfYear,dayOfMonth);        			}        });                tp.setOnTimeChangedListener(new OnTimeChangedListener(){        			public void onTimeChanged(TimePicker view,int hourOfDay,int minute){        				flushTime(hourOfDay,minute);        			}        });    }    public void flushDate(int year,int monthOfYear,int dayOfMonth){    	EditText et = (EditText) findViewById(R.id.editText1);    	et.setText("您选择的日期是: "+year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日");    }    public void flushTime(int hourOfDay,int minute){    	EditText et = (EditText) findViewById(R.id.editText2);    	et.setText("您选择的时间是: "+hourOfDay+"时"+minute+"分");    	    }}

5. 动画播放技术
动画播放技术主要有两种:帧动画和补间动画。
1) 帧动画
帧动画主要用到的类是AnimationDrawable,每个帧动画都是一个AnimationDrawable对象
定义帧动画可以在代码中直接进行,也可以通过XML文件进行定义,定义帧动画的XML文件将存放在res/anim目录下。XML文件中指定了图片图片帧出现的顺序及每个帧的连续时间。

anim.xml
<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android"	android:oneshot = "false">	<item android:drawable = "@drawable/f1" android:duration="500" android:visible  = 	"true"/>	<item android:drawable = "@drawable/f2" android:duration="500" android:visible  = 	"true"/>	<item android:drawable = "@drawable/f3" android:duration="500" android:visible  = 	"true"/>	<item android:drawable = "@drawable/f4" android:duration="500" android:visible  = 	"true"/></animation-list>


main.xml
<?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/linearLayout1">        <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView1" android:layout_gravity="center_horizontal" android:src="@anim/anim"></ImageView>        <Button android:layout_height="wrap_content" android:id="@+id/button1" android:text="click" android:layout_width="fill_parent" android:layout_gravity="center_horizontal"></Button>    </LinearLayout>
   
   

Activity:
package qijia.si;import android.app.Activity;import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;public class MyAndroidProject extends Activity {					/** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);           setContentView(R.layout.main);        Button btn = (Button) findViewById(R.id.button1);        btn.setOnClickListener(new OnClickListener(){        		public void onClick(View v){        			ImageView iv = (ImageView) findViewById(R.id.imageView1);        			iv.setBackgroundResource(R.anim.anim);        			AnimationDrawable ad = (AnimationDrawable) iv.getBackground();        			ad.start();        		}        });    	    }}
2)补间动画
补间动画作用于View对象,主要包括View对象的位置,尺寸,旋转角度和透明度的变换。
补间动画可以通过XML声明也可以在代码中动态定义。推荐使用XML因为XML文件可读性及可用性高,方便替换。

  相关解决方案