Android开发03—Android常用基本控件(上)
Android开发03—Android常用基本控件(下)
Android开发03—Android常用基本控件(下)
1. 单选按钮和复选按钮
CheckBox和RadioButton控件都只有选中和未选中两种状态,不同的是RadioButton是单选按钮,需要便知道RadioGroup中,同一时刻一个RadioGroup中只能有一个按钮处于选中状态。
使用举例:
ImageView控件负责显示图片,其图片的来源既可以是资源文件的id,也可以是Drawable对象或BitMap对象,还可以是ContentProvider的Uri。
实例:ImageView的用法
string.xml
Activity部分代码:
3. 时钟控件
AnalogClock和DigitalClock都负责显示时钟,所不同的是AnalogClock控件显示模拟时钟,且只显示时针和分针,而digital显示数字时钟,可精确到秒
直接在main.xml中定义时钟控件即可。
4. 日期与时间选择控件
DatePicker继承自FrameLayout类,主要功能是向用户提供包含年,月,日的日期数据,并允许用户进行选择。如果要捕获用户修改日期选择控件中数据的时间,需要为DatePicker添加onDateChangedListener监听器。
TimePicker同样继承自FrameLayout类。时间选择控件向用户显示一天中的时间,并允许用户进行选择,如果要捕获用户修改时间数据的时间,便需要为TimePicker添加OnTimeChangedListener监听器。
案例:
main.xml
Activity:
5. 动画播放技术
动画播放技术主要有两种:帧动画和补间动画。
1) 帧动画
帧动画主要用到的类是AnimationDrawable,每个帧动画都是一个AnimationDrawable对象
定义帧动画可以在代码中直接进行,也可以通过XML文件进行定义,定义帧动画的XML文件将存放在res/anim目录下。XML文件中指定了图片图片帧出现的顺序及每个帧的连续时间。
anim.xml
main.xml
Activity:
补间动画作用于View对象,主要包括View对象的位置,尺寸,旋转角度和透明度的变换。
补间动画可以通过XML声明也可以在代码中动态定义。推荐使用XML因为XML文件可读性及可用性高,方便替换。
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文件可读性及可用性高,方便替换。