android:spacing="16dp",Android入门/ImageSwitcher(十四)

public class

ImageSwitcher  图片切换器

0818b9ca8b590ca3270a3433284dd417.png

ImageSwitecher 与 Gallery的使用

1.  准备UI界面  包括setContentView() ,    Find Widget

2.  准备数据源, 使用  R.drawable.class.getDeclaredFields() 反射机制获取资源中的图片

3.  生成适配器重写getView()方法 ,适应Gallery 滑动

4.  Gallery的Items 点击事件处理 , 设置ImageSwitcher显示资源

5.设置ImageSwitcher的makeView方法 , 设置相关的动画效果

6. 设置ImageSwitcher的Click事件 ,适应于Gallery同时滑动

相关注释在 java代码中写的很详细,如有错误还请指出.

3个ImageSwitcher的 重要方法

public voidsetImageDrawable (Drawable drawable) 绘制图片

public voidsetImageResource (int resid)设置资源

public voidsetImageURI (Uri uri)设置图片地址

main.xml

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/switcher"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

android:id="@+id/gallery"

android:background="#55000000"

android:layout_width="match_parent"

android:layout_alignParentBottom="true"

android:layout_alignParentLeft="true"

android:gravity="center_vertical"

android:spacing="16dp"

android:layout_height="100dp"/>

Java代码

public class Main extends Activity implements ViewFactory

{

private ImageSwitcher is;//ViewSwitcher适用于两个视图带动画效果的切换。

private Gallery gallery;

private int downX,upX;

private ArrayList imgList=new ArrayList();//图像ID

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

PreInit();

ImageIdUnit();

ImageSwitchInit();

GalleryInit();

}

/*

* 作用是控制ImageSwitcher 视图的控制

* */

public View makeView() {

ImageView i = new ImageView(this);

i.setBackgroundColor(0xFF336699);

i.setScaleType(ImageView.ScaleType.FIT_CENTER);

i.setLayoutParams(new ImageSwitcher.LayoutParams(//自适应图片大小

LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

return i;

}

/**

* 用反射机制来获取资源中的图片ID

* */

private void ImageIdUnit(){

/**

* Field 类说明 这个类代表了一个字段/ 有关字段内的信息可以被访问,字段的值可以被动态的访问

* */

Field[] fields = R.drawable.class.getDeclaredFields();

for (Field field : fields)

{

if (!"icon".equals(field.getName()))//除了icon之外的图片

{

int index = 0;

try {

index = field.getInt(R.drawable.class);// 返回指定对象的字段值 (int)

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

//保存图片ID

imgList.add(index);

}

}

}

/**

* find widget

* */

private void PreInit(){

setContentView(R.layout.main);

//设置ImageSwitcher控件 即设置中间的大图

is = (ImageSwitcher) findViewById(R.id.switcher);

//设置gallery控件

gallery = (Gallery) findViewById(R.id.gallery);

}

/**

* ImageSwitcher setting

* */

private void ImageSwitchInit(){

// 设置处理的视图 即当前Activity下的 ViewSwitcher控件

is.setFactory(this);

// 设置View进入的切换效果

// AnimationUtils.loadAnimation()从资源加载动画对象

is.setInAnimation(AnimationUtils.loadAnimation(this,

android.R.anim.fade_in));

// 设置View退出的切换效果

is.setOutAnimation(AnimationUtils.loadAnimation(this,

android.R.anim.fade_out));

/**

* 在ImageSwitcher控件上滑动可以切换图片(即滑动中间的大图)

*/

is.setOnTouchListener(onTouchListener);

}

/**

* Gallery

* */

private void GalleryInit(){

ImageAdapter imgAdapter = new ImageAdapter(this);

imgAdapter.setList(imgList);

gallery.setAdapter(imgAdapter);

//点击Gallery的小图 在上方显示大图

gallery.setOnItemSelectedListener(new OnItemSelectedListener(){

@Override

public void onItemSelected(AdapterView> arg0, View arg1,

int position, long arg3) {

// 在滑动Gallery时 在ImageSwitcher显示被点击的的资源

is.setImageResource(imgList.get(position));// 资源id

}

@Override

public void onNothingSelected(AdapterView> arg0) {

// TODO Auto-generated method stub

}

});

}

// OnTouchListener 事件

private OnTouchListener onTouchListener = new OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {

/**

* event.getAction() 返回任一一种正在执行行动 ;

*/

if(event.getAction()==MotionEvent.ACTION_DOWN)

{

downX=(int) event.getX();//取得按下时的坐标

return true;

}else if(event.getAction()==MotionEvent.ACTION_UP){

upX=(int) event.getX();//取得松开时的坐标

int index=0;

if(upX-downX>100)//从左拖到右,即看前一张

{

//如果是第一,则去到尾部

if(gallery.getSelectedItemPosition()==0)

index=gallery.getCount()-1;

else

index=gallery.getSelectedItemPosition()-1;

}else if(downX-upX>100){//从右拖到左,即看后一张

//如果是最后,则去到第一

if(gallery.getSelectedItemPosition()==(gallery.getCount()-1))

index=0;

else

index=gallery.getSelectedItemPosition()+1;

}

//改变gallery图片所选,自动触发ImageSwitcher的setOnItemSelectedListener

Main.this.setTitle("Your Choose is "+index);

// Gallery 设置position 所以ImageSwitcher 与 Gallery 是一起滑动的

gallery.setSelection(index, true);

return true;

}

return false;

}

};

}

ImageAdapter.java

public class ImageAdapter extends BaseAdapter {

private ArrayList imgList;

public void setList(ArrayList list){

this.imgList = list;

}

public ImageAdapter(Context c) {

mContext = c;

}

public int getCount() {

return imgList.size();

}

public Object getItem(int position) {

return position;

}

public long getItemId(int position) {

return position;

}

// gallery 改变View

public View getView(int position, View convertView, ViewGroup parent) {

ImageView i = new ImageView(mContext);

i.setImageResource(imgList.get(position));

i.setAdjustViewBounds(true);

i.setLayoutParams(new Gallery.LayoutParams(

LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

return i;

}

private Context mContext;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值