【android基础学习之六】——常用效果1

晨曦之光 发布于 2012/03/08 14:19
阅读 1K+
收藏 1

 声明:学习的书籍《Android应用开发揭秘》,这里记录学习该书籍的日志,引用的相关代码与总结描述,没有商业的用途,完全是自我学习的一个记录,刚刚学习不可避免会出现很多问题,若是有错误还请大家多多批评。

继续学习《android应用开发揭秘》这本书,这里把基础控件的学习进行了分类,下面两篇博客主要是一些常用的效果

一、    拖动效果(Gallery)

拖动效果是现在智能手机的一个不可缺少的功能,Android平台中实现拖动效果,主要是使用了Gallery控件,Gallery英文是画廊的意思,顾名思义存放这显示的图片,存放图片资源容器是继承自BaseAdapter类的派生类。当然我们也可以通过setOnItemClickListener监听其事件。

【注意】Gallery 组件一般用于显示图像列表,因此也可称相册组件 Gallery 与GridView 的区别是Gallery只能水平显示一行,而且支持水平滑动效果。也就是说,单击、选中或拖动Gallery 中的图像,Gallery中的图像列表会根据不同的情况向左或右移动,直到显示最后一个图像为止.

 

实例分析:基于上述介绍,把要显示的图片资源索引存在一个int类型数组中,并且要显示哪个图片,通过setImageResource方法来设置ImageView要显示的图片。

关键源码:

main.xml布局文件:

<?xml version="1.0" encoding="utf-8"?>
<Gallery 
xmlns:android="http://schemas.android.com/apk/res/android" 
  android:id="@+id/Gallery01"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
/>

注意,以下ImageAdapter类继承自BaseAdapter,并重写其方法

public class ImageAdapter extends BaseAdapter {
	private Context		mContext;		// 定义Context
	// 定义整型数组 即图片源
	private Integer[]	mImageIds = { 						
			R.drawable.img1, 
			R.drawable.img2, 
			R.drawable.img3, 
			R.drawable.img4, 
			R.drawable.img5, 
			R.drawable.img6, 
			R.drawable.img7,
			R.drawable.img8,		
	};
	public ImageAdapter(Context c) {
		this.mContext = c;
	}
	//获取图片个数
	public int getCount() {
		return mImageIds.length;
	}
	//获取图片在图库的位置
	public Object getItem(int position) {
		return position;
	}
	// 获取图片ID
	public long getItemId(int position) {
		return position;
	}
	public View getView(int position, View convertView, ViewGroup parent{
		ImageView imageview = new ImageView(mContext);
		//给ImageView设置资源
		imageview.setImageResource(mImageIds[position]);
		//设置布局图片120x120显示
		imageview.setLayoutParams(new Gallery.LayoutParams(120,120));
		//设置显示比例类型
		imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);
		return imageview;
	}
}

而实际Activity01中只要把adapter付给Gallery对象,并设置监听事件即可“

//获得Gallery对象
Gallery g = (Gallery) this.findViewById(R.id.Gallery01);
//添加ImageAdapter给Gallery对象
g.setAdapter(new ImageAdapter(this));
//设置Gallery对象的监听事件
g.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Toast.makeText(Examples_04_17Activity.this,"你选择了"+(arg2+1)+" 号图片", Toast.LENGTH_SHORT).show();}
});

实例效果:

二、     切换图片(ImageSwitcher)

该功能类似于很多图片浏览器,上一张下一张图片进行切换,ImageSwitcher在实现该效果时,需要设置一个ViewSwitcher.ViewFactory,注意ViewSwitcher.ViewFactory是个接口,目的:在视图转换器(ViewSwitcher)中创建视图。并通过makeView()方法来显示图片。

公共方法:public abstract View makeView ()

创建一个用于添加到视图转换器(ViewSwitcher)中的新视图

 

关键源码:

private ImageSwitcher m_Switcher; //创建ImageSwitcher对象
	private static int index = 0; //索引
	private static final int BUTTON_DOWN_ID = 0x123456; //“下一页”按钮ID
	private static final int BUTTON_UP_ID	= 0x123457; //“上一页”按钮ID
private static final int SWITCHER_ID	= 0x123458; //ImageSwitcher对象的ID
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout main_view = new LinearLayout(this);
        m_Switcher = new ImageSwitcher(this); //创建ImageSwitcher对象
        main_view.addView(m_Switcher); //在线性布局中添加ImageSwitcher视图
        m_Switcher.setId(SWITCHER_ID); //设置ImageSwitcher对象的ID
        m_Switcher.setFactory(this); //设置ImageSwitcher对象的数据源
        m_Switcher.setImageResource(imagelist[index]);
        
        setContentView(main_view); //设置显示上面创建的线性布局

        Button next = new Button(this); //创建“下一张”按钮
        next.setId(BUTTON_DOWN_ID);
        next.setText("下一张");
        next.setOnClickListener(this);
        LinearLayout.LayoutParams param = new  LinearLayout.LayoutParams(100, 100);
        main_view.addView(next, param);
    
		Button pre = new Button(this); //创建“上一张”按钮
		pre.setId(BUTTON_UP_ID);
		pre.setText("上一张");
		pre.setOnClickListener(this);
		main_view.addView(pre, param);
    }
//事件监听、处理
	public void onClick(View v) {
		switch(v.getId()){
			case BUTTON_DOWN_ID: //下一页
			index++;
			if (index >= imagelist.length){
				index = 0;
			}
			//ImageSwitcher对象资源索引
			m_Switcher.setImageResource(imagelist[index]);
			break;
		    case BUTTON_UP_ID: //上一页
			index--;
			if (index < 0){
				index = imagelist.length - 1;
			}
			//ImageSwitcher对象资源索引
			m_Switcher.setImageResource(imagelist[index]);
			break;
		default:
			break;
		}
	}
	@Override
	public View makeView() {
		return new ImageView(this); //将所有图片通过ImageView来显示
	}

【扩展点】ViewSwitcher

一、结构

public class ViewSwitcher extends ViewAnimator

        

Java.lang.Object

android.view.View

         android.view.ViewGroup

                   android.widget.FrameLayout

                            android.widget.ViewAnimator

                                     android.widget.ViewSwitcher

已知直接子类:ImageSwitcher, TextSwitcher

二、概述

在两个视图间转换时显示动画,有一个可以创建这些视图的工厂类。你可以用工厂来创建这些视图,也可以自己创建。一个ViewSwitcher只允许包含两个子视图,且一次仅能显示一个。

(译者注:与ViewFlipper类相似,但该类不常用,常用其两个子类ImageSwitcher:转换图片时增加动画效果; TextSwitcher: 转换文字时增加动画效果; 其实例见apidemos中ImageSwitcher实例和TextSwitcher实例)

三、内部类

interface          ViewSwitcher.ViewFactory     

在一个ViewSwitcher里创建视图

…………….

五、公共方法

public void setFactory (ViewSwitcher.ViewFactory factory)

设置用来生成将在视图转换器中切换的两个视图的工厂。也可以调用两次 addView(android.view.View, int, android.view.ViewGroup.LayoutParams)来替代使用工厂的方法。

参数: factory   用来生成转换器内容的视图工厂

引用自:http://dev.10086.cn/cmdn/wiki/index.php?doc-view-4764.html

实例效果:

三、网格视图(GridVIew)

         网格视图的排列方式与矩阵类似,它所需要显示元素同样适用BaseAdapter来实现,适用方法,类似于Gallery控件

         关键代码:

//取得GridView对象
GridView gridview = (GridView) this.findViewById(R.id.gridview);
//添加元素给gridview
gridview.setAdapter(new ImageAdapter(this));
gridview.setBackgroundResource(R.drawable.bg0);
//事件监听
gridview.setOnItemClickListener(new OnItemClickListener() {
	@Override
	public void onItemClick(AdapterView<?> parent, View v, int position, long id){
		Toast.makeText(Activity01.this, "你选择了" + (position + 1) + " 号图片", Toast.LENGTH_SHORT).show();
	}
});

四、卷轴视图(ScrollView)

卷轴视图主要用于,一页数据显示不开后,需要滚动来显示的视图。

实例分析:ScrollView定义个线性布局,线性布局中一个TextView以及一个Button,每点击一次按钮就增加一个线性布局。

关键源码:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ScrollView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
android:scrollbars="none" >
...... 
</ScrollView>

 

在按钮点击事件里:

......  
//改变默认焦点切换  
buttonView.setOnKeyListener(mNewButtonKeyListener); 
//投递一个消息进行滚动   
mHandler.post(mScrollToBottom);  

private Runnable mScrollToBottom = new Runnable() {   
        @Override  
        public void run(){   
            int off = mLayout.getMeasuredHeight() - mScrollView.getHeight();   
            if (off > 0) {   
                mScrollView.scrollTo(0, off);//设置当前视图滚动到的位置
            }                          
        }   
    };   

今天学习到P101页


原文链接:http://blog.csdn.net/yinyuan1987/article/details/6911765
加载中
返回顶部
顶部