首先,先看一下实现的截图:

如图所示,
其中布局的第一个控件是Gallery,显示的图片滑动浏览,这里用到一个继承自BaseAdapter的类对象,用于填充和显示Gallery中的内容;
布局的第二个控件是ImageView,当用户滑动Gallery时,显示其中的图片,这其中实现了两个重载方法
1.当用户点击Gallery的图片资源时,以Toast的形式告诉用户点击的是哪一幅图片,实现的代码如下:
/*设定一个itemclickListener并Toast被点选图片的位置*/
g.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(EX04_10.this, getString(R.string.my_gallery_text_pre)
+ position
+ getString(R.string.my_gallery_text_post), Toast.LENGTH_SHORT).show();
}
});
2.当Gallery获得焦点时,ImageView显示用户选择的是哪一幅图片,实现的代码如下:
g.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3)
{
// TODO Auto-generated method stub
imageView.setImageResource(myImageIds[arg2]);
}
@Override
public void onNothingSelected(AdapterView<?> arg0)
{
// TODO Auto-generated method stub
}
});
下面给出本实例用到的布局文件和具体的实现源代码:
布局文件代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Gallery
android:id="@+id/mygallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<ImageView
android:id="@+id/imageview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="center"
/>
</LinearLayout>
具体的实现代码:
public class EX04_10 extends Activity {
/*建构一Integer array并取得预加载Drawable的图片id*/
private Integer[] myImageIds = { R.drawable.photo1, R.drawable.photo2,
R.drawable.photo3, R.drawable.photo4,
R.drawable.photo5, R.drawable.photo6, };
private ImageView imageView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/*透过findViewById取得*/
Gallery g = (Gallery) findViewById(R.id.mygallery);
imageView=(ImageView)findViewById(R.id.imageview);
/*新增一ImageAdapter并设定给Gallery对象*/
g.setAdapter(new ImageAdapter(this));
/*设定一个itemclickListener并Toast被点选图片的位置*/
g.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(EX04_10.this, getString(R.string.my_gallery_text_pre)
+ position
+ getString(R.string.my_gallery_text_post), Toast.LENGTH_SHORT).show();
}
});
g.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3)
{
// TODO Auto-generated method stub
imageView.setImageResource(myImageIds[arg2]);
}
@Override
public void onNothingSelected(AdapterView<?> arg0)
{
// TODO Auto-generated method stub
}
});
}
/*改写BaseAdapter自定义一ImageAdapter class*/
public class ImageAdapter extends BaseAdapter {
int mGalleryItemBackground;
private Context mContext;
/*ImageAdapter的建构子*/
public ImageAdapter(Context c) {
mContext = c;
/* 使用在res/values/attrs.xml中的定义 * 的Gallery属性.*/
TypedArray a = obtainStyledAttributes(R.styleable.Gallery);
/*取得Gallery属性的Index id*/
mGalleryItemBackground = a.getResourceId( R.styleable.Gallery_android_galleryItemBackground, 0);
/*让对象的styleable属性能够反复使用*/
a.recycle();
}
/*一定要重写的方法getCount,传回图片数目*/
public int getCount() {
return myImageIds.length;
}
/*一定要重写的方法getItem,传回position*/
public Object getItem(int position) {
return position;
}
/*一定要重写的方法getItemId,传回position*/
public long getItemId(int position) {
return position;
}
/*一定要重写的方法getView,传回一View对象*/
public View getView(int position, View convertView, ViewGroup parent) {
/*产生ImageView对象*/
ImageView i = new ImageView(mContext);
/*设定图片给imageView对象*/
i.setImageResource(myImageIds[position]);
/*重新设定图片的宽高*/
i.setScaleType(ImageView.ScaleType.FIT_XY);
/*重新设定Layout的宽高*/
i.setLayoutParams(new Gallery.LayoutParams(136, 110));
/*设定Gallery背景图*/
i.setBackgroundResource(mGalleryItemBackground);
/*传回imageView物件*/ return i;
}
}
}
分享到:
相关推荐
总的来说,“Gallery可拖动和放大图片”是一个结合了`Gallery`滑动和图片手势操作的实例,它展示了如何在Android应用中实现高效且交互丰富的图片浏览功能。通过深入学习和理解这个示例,开发者可以为自己的应用添加...
在这个demo中,开发人员利用了Android平台上的`Gallery`组件和`ImageSwitcher`组件来实现这一功能。 `Gallery`是Android SDK提供的一种视图类,它允许用户通过水平滚动来浏览一系列项目,每个项目通常代表一张图片...
总结来说,`Android超炫图片浏览器代码`项目展示了如何通过扩展`Gallery`组件并利用自定义适配器来创建具有倒影和3D效果的图片浏览器。这涉及到对`Bitmap`的处理、`Matrix`的使用以及对Android控件的深度定制。通过...
为了实现图片的缩放和平移,我们需要自定义一个ImageView或者使用开源库如Universal Image Loader或UIL。通过手势识别,我们可以实现双指缩放,单指平移等操作,增强用户交互体验。 再者,考虑到性能优化,源码可能...
为了实现图片的缩放功能,开发者通常会利用Android的`ScaleGestureDetector`类,这是一个手势检测工具,可以识别用户的捏合手势,从而调整ImageView中的图片大小。结合`GestureDetector`和`Scroller`类,可以实现...
然而,通过自定义,我们仍然可以利用Gallery实现3D效果。 首先,获取手机中的图片路径是实现图片浏览器的基础。在Android中,通常我们通过访问外部存储(SD卡)来获取图片。以下是一个简单的示例,展示如何获取所有...
3. 滑动切换:为了实现图片间的平滑切换,通常会用到ViewPager或者Gallery组件。ViewPager可以轻松实现页面的左右滑动,配合PagerAdapter或FragmentPagerAdapter,可以加载和切换不同的图片。 4. 图片手势识别:...
本课程设计报告将详细介绍如何在嵌入式系统环境中,利用Android系统进行图片浏览器的开发。 一、课程设计目的 开发Android图片浏览器的主要目的是理解和掌握Android应用程序的基本架构和编程模型,包括UI设计、数据...
`GestureDetector`和`ScaleGestureDetector`可以帮助你识别单击、双击、滑动和缩放等手势,为图片浏览器添加更多交互功能。 通过以上知识点的学习和实践,你可以掌握如何在Android平台上开发一个功能完善的图片...
7. **自定义View**:可能需要自定义ImageView或者Gallery来实现特定的布局和交互效果。自定义View时,要注意重写onDraw()方法,并合理利用硬件加速。 8. **图片格式支持**:考虑到不同的图片格式,如JPEG、PNG、...
这篇博客"Android学习记录使用Gallery实现炫丽的拖动效果"深入探讨了如何利用`Gallery`来打造这种交互体验。 `Gallery`是Android SDK中一个非常实用的控件,它允许用户水平滑动浏览多个项目,每个项目通常代表一个...
Gallery3D的用户界面简洁而直观,这在源代码中体现为对Android UI组件的使用,如ImageView、Adapter等,以及自定义View的实现,以满足3D效果的需求。 ### 9. **国际化与适配** 作为一款面向全球用户的应用,Gallery...
Gallery3D的核心在于它将2D的ListView扩展到了3D空间,通过平移和缩放等操作,实现了图片在3D空间中的展示。其基本结构包括以下几个部分: 1. 视图容器:Gallery3D使用ViewGroup作为基础,创建了一个可以容纳多个...
Gallery3D可能包含了自定义的View和动画效果,如自定义的ImageView来支持3D特效,或者使用ObjectAnimator和ValueAnimator实现平滑的过渡效果。 综上所述,Gallery3D.zip这个压缩包内含的源代码和资源文件展示了...
在本教程中,我们将深入探讨如何利用Android SDK中的`Gallery`控件来实现类似CoverFlow的视觉效果。 首先,`Gallery`控件是Android提供的一个视图容器,它允许用户通过水平滚动来浏览一系列子项。`CoverFlow`效果是...
2. **图片显示与缩放**:源代码可能会包含使用Android的ImageView或自定义View来实现平滑的图片缩放和平移。这通常涉及到矩阵操作和双缓冲技术,以确保图像在放大或缩小时保持清晰。 3. **手势识别**:为了实现用户...
在Android中,ImageView是用于显示单张图片的基础控件,但为了实现滑动浏览和手势操作,我们需要更强大的组件,如Gallery、ViewPager或者自定义的ScrollView。QQ图片浏览功能最可能使用的是ViewPager,因为它可以...
对于图片的倾斜,我们可以调整`ImageView`的`pivotX`和`pivotY`属性,再配合`rotationY`动画,实现图片的倾斜效果。对于放大效果,可以使用`ScaleAnimation`,在图片切换时对其进行放大和缩小的动画处理,以增强...
在`GalleryDemo`中,`Gallery`被用作图片浏览器的主体部分,用户可以通过左右滑动来浏览不同的图片。 2. **Adapter机制** `Gallery`组件的数据来源通常通过`Adapter`实现,如`BaseAdapter`或`ArrayAdapter`。在`...
总的来说,虽然原生的Gallery控件在新版本的Android中已不再推荐使用,但通过自定义和优化,我们依然可以利用它或者其他的视图组件来实现引人注目的Cover Flow效果。这个过程涉及到Android UI编程的多个方面,包括...