加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_郴州站长网 (http://www.0735zz.com/)- 云通信、区块链、物联设备、云计算、站长网!
当前位置: 首页 > 教程 > 正文

Android开发:ImageSwitcher常用方法

发布时间:2021-11-25 16:44:34 所属栏目:教程 来源:互联网
导读:ImageSwitcher 是 ViewGroup 的派生类, ViewGroup 是 View 的派生类。 ImageSwitcher 很简单见,但在使用它的时候,有一个地方必须要注意,否则就会出现 NullPointerException 。具体情况,请见下面的例子。 在这个例子中,我们将大致要重复做一遍 AndroidG


ImageSwitcher 是 ViewGroup 的派生类, ViewGroup 是 View 的派生类。  
 
ImageSwitcher 很简单见,但在使用它的时候,有一个地方必须要注意,否则就会出现 NullPointerException 。具体情况,请见下面的例子。  
 
在这个例子中,我们将大致要重复做一遍 AndroidGUI19 : Gallery 常用技巧中的提到的事情。也就是说,这次我们还要用到 Gallery ,不过这次不再用 ImageView 来显示大图了,而是改用 ImageSwitcher 来代替它。  
 
1.     创建一个 Android Project ,修改 main.xml 使之如下:
 
<? xml version = "1.0" encoding = "utf-8" ?>
 
< RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
 
    android:orientation = "vertical"
 
    android:layout_width = "fill_parent"
 
    android:layout_height = "fill_parent"
 
    >
 
   
 
    < ImageSwitcher
 
    android:id = "@+id/imageswitcher"
 
    android:layout_width = "match_parent"
 
    android:layout_height = "wrap_content"
 
    android:layout_alignParentTop = "true"
 
    />
 
 
 
         < Gallery
 
                   android:id = "@+id/gallery"
 
                   android:layout_width = "fill_parent"
 
                   android:layout_height = "wrap_content"
 
                   android:gravity = "center_vertical"
 
                   android:spacing = "10px"
 
                   android:layout_marginTop = "10px"
 
                   android:layout_alignParentBottom = "true"
 
         />
 
         <!--
 
                   android:layout_alignParentBottom="true"
 
                   就是让 Gallery 位于屏幕底端, LinearLayout 不存在这个属性
 
         -->
 
        
 
</ RelativeLayout >
 
 
 
2.     把项目需要用到的图片文件拖入 res/drawable-mdpi 文件夹下,如下图所示
 
 
 
 
 
 
3.     实现一个自定义的 Adapter: ImageAdapter ,代码如下:
 
package com.pat.gui;
 
 
 
import android.content.Context;
 
import android.graphics.Color;
 
import android.view.View;
 
import android.view.ViewGroup;
 
import android.widget.BaseAdapter;
 
import android.widget.Gallery;
 
import android.widget.ImageView;
 
 
 
public class ImageAdapter extends BaseAdapter
 
{
 
         private Context ctx;
 
        
 
         private int images[] =
 
         {
 
                   R.drawable.lrt01,
 
                   R.drawable.lrt02,
 
                   R.drawable.lrt03,
 
                   R.drawable.lrt04,
 
                   R.drawable.lrt05,
 
                   R.drawable.lrt06,
 
                   R.drawable.lrt07,
 
                   R.drawable.lrt08,
 
                   R.drawable.lrt09
 
         };
 
        
 
         public ImageAdapter(Context ctx)
 
         {
 
                   this.ctx = ctx;
 
         }
 
        
 
         //@Override
 
         public int getCount()
 
         {
 
                   return images.length;
 
         }
 
 
 
         //@Override
 
         public Object getItem(int position)
 
         {
 
                   return images[position];
 
         }
 
 
 
         //@Override
 
         public long getItemId(int position)
 
         {
 
                   return images[position];
 
         }
 
 
 
         //@Override
 
         public View getView(int position, View convertView, ViewGroup parent)
 
         {
 
                   ImageView view;
 
                   view = (ImageView)convertView;
 
                   if(view == null)
 
                   {
 
                            view = new ImageView(ctx);
 
                   }
 
                  
 
                   view.setImageResource(images[position]);
 
                   view.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
 
                   view.setLayoutParams(new Gallery.LayoutParams(60, 60));
 
                   view.setBackgroundColor(Color.LTGRAY);
 
                  
 
                   return view;
 
         }
 
 
 
}
 
 
 
4.     实现 Activity 所对应的代码,使之如下 ( 注意其中的粗体字部分 ) :
 
package com.pat.gui;
 
 
 
import android.app.Activity;
 
import android.os.Bundle;
 
import android.util.DisplayMetrics;
 
import android.view.View;
 
import android.view.Window;
 
import android.view.WindowManager;
 
import android.widget.AdapterView;
 
import android.widget.Gallery;
 
import android.widget.ImageSwitcher;
 
import android.widget.ImageView;
 
import android.widget.AdapterView.OnItemSelectedListener;
 
import android.widget.FrameLayout.LayoutParams;
 
import android.widget.ViewSwitcher.ViewFactory;
 
 
 
public class ControlImageSwitcher extends Activity
 
implements
 
OnItemSelectedListener, ViewFactory
 
{
 
         private Gallery gallery;
 
         private ImageSwitcher imageswitcher;
 
         private ImageAdapter adapter;
 
         private DisplayMetrics dm;
 
        
 
    //@Override
 
    public void onCreate(Bundle savedInstanceState)
 
    {
 
        super.onCreate(savedInstanceState);
 
        requestWindowFeature(Window.FEATURE_NO_TITLE);// 隐藏标题
 
        int flag = WindowManager.LayoutParams.FLAG_FULLSCREEN;  // 全屏
 
        this.getWindow().setFlags(flag, flag);
 
       
 
        setContentView(R.layout.main);
 
       
 
        // 得到屏幕尺寸
 
        dm = new DisplayMetrics();
 
        getWindowManager().getDefaultDisplay().getMetrics(dm);
 
       
 
        gallery = (Gallery)this.findViewById(R.id.gallery);
 
        imageswitcher = (ImageSwitcher)this.findViewById(R.id.imageswitcher);
 
       
 
        // 下面这句必须要,不然会使 setImageSource 这个方法指向空指针
 
        imageswitcher.setFactory(this);
 
       
 
        adapter = new ImageAdapter(this);
 
       
 
        gallery.setAdapter(adapter);
 
 
 
        gallery.setOnItemSelectedListener(this);
 
    }
 
 
 
         //@Override
 
         public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
 
         {
 
                   int imageID = (int) adapter.getItemId(position);
 
                   imageswitcher.setImageResource(imageID);
 
         }
 
 
 
         //@Override
 
         public void onNothingSelected(AdapterView<?> parent)
 
         {
 
                   imageswitcher.setImageResource((int) adapter.getItemId(0));
 
         }
 
 
 
         //@Override
 
         // 接口 ViewFactory 中规定必须实现的方法,返回的 View 就是 ImageSwitcher 用于显示图片的 vie w
 
         public View makeView()
 
         {
 
                   ImageView iv = new ImageView(this);
 
                   // 设置背景颜色
 
                   iv.setBackgroundColor(0xFF646464);
 
                   iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
 
                   iv.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT, dm.heightPixels - 70));
 
                   // 上面语句中 -70 的目的是应为, ImageSwitcher 下面要显示 Gallery ,我们在 ImageAdapter 中设定了
 
                   // view.setLayoutParams(new Gallery.LayoutParams(60, 60));
 
                   // 即高度是 60pixels ,在加在 main.xml 中 Gallery 有下面这样的属性:
 
                   // android:layout_marginTop="10px"
 
                   // 因此加起来一共刚好是 70px
 
                  
 
                   return iv;
 
         }
 
}
 
 
 
运行结果:
 
 
 
 
让下面的 Gallery 中的图片滚动,上面的 ImageSwitcher 会显示 Gallery 在屏幕上处于中间 ( 水平方向 ) 位置的那副图片:

(编辑:开发网_郴州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读