`

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文件可读性及可用性高,方便替换。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics