`
mengsina
  • 浏览: 191570 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android开发之gallery 实现滚动一张且短距离滑动实现滚动(转)

阅读更多
转自:http://hi.baidu.com/lvqiyong/blog/item/afbaad3daa102ff454e72390.html
首先gallery的特点就不用多说了吧,惯性滚动、半屏翻页,但是很多时候我们不需要它的这些特性。我今天就介绍一下 去掉惯性滚动 以及 短距离翻页的实现:
代码先晒出来:
main.xml:
<?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"
    >
<com.mh.DetialGallery  android:id="@+id/gallery" android:layout_width="fill_parent"
        android:layout_height="fill_parent"  />
</LinearLayout>

注意红色的地方 是自己继承的类。

main.java:
package com.mh;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;

public class main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN ,
     WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.main);
        Gallery gallery = (Gallery) findViewById(R.id.gallery); 
        gallery.setAdapter(new ImageAdapter(this));; 

    }
  
    private int[] resIds = new int[] 
         { R.drawable.a1, R.drawable.a2, R.drawable.a3,         
           R.drawable.a4, R.drawable.a5, R.drawable.a6,       
           R.drawable.a7, R.drawable.a8, R.drawable.a9  
         }; 
   
   
  

public class ImageAdapter extends BaseAdapter 
    { 
        int mGalleryItemBackground; 
        private Context mContext; 
    
        public ImageAdapter(Context context) 
        { 
            mContext = context;                    
        } 

        public int getCount() 
        { 
            return resIds.length; 
        } 
        public Object getItem(int position) 
        { 
            return position; 
        } 
    
        public long getItemId(int position) 
        { 
            return position; 
        } 
      
        public View getView(int position, View convertView, ViewGroup parent) 
        { 
            ImageView imageView = new ImageView(mContext); 
            imageView.setImageResource(resIds[position]);
            imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
            imageView.setLayoutParams(new Gallery.LayoutParams(480, 800));   //分辨率自己定
            return imageView; 
        } 
    }

}


DetialGallery.java:
package com.mh;

import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.widget.Gallery;

public class DetialGallery extends Gallery {

    public DetialGallery(Context context ,AttributeSet attrSet) {
     super(context,attrSet);
     // TODO Auto-generated constructor stub
    }

private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2)
   { 
    return e2.getX() > e1.getX();
   }
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
   float velocityY) {
  // TODO Auto-generated method stub
//  return super.onFling(e1, e2, 0, velocityY);//方法一:只去除翻页惯性
//  return false;//方法二:只去除翻页惯性  注:没有被注释掉的代码实现了开始说的2种效果。
  int kEvent;
  if(isScrollingLeft(e1, e2)){
   //Check if scrolling left   
   kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
   }  else{
    //Otherwise scrolling right  
    kEvent = KeyEvent.KEYCODE_DPAD_RIGHT; 
    }
  onKeyDown(kEvent, null);
  return true;
  }
}

如何在Gallery中每次滑动只显示一页
2011-01-20 20:09:50

要求在Gallery中每次滑动最多显示一页。解决方法是重载onfling函数。
有两种方法,可以在onfling中检测X轴的速度,如果大于一定值,将其减少为只能移动一页的速度。但是这个滑动一页的速度比较难掌握,据我估计在500到700之间。还有一种方法是直接调用gallery的setSelection来跳到下一页,但是这样做的缺点是没有了页间动画。

因为屏幕分辨率问题,检测速度是否大于一定值我的计算方法为
        // Convert the dips to pixels
    float scale = getResources().getDisplayMetrics().density;
    FLINGTHRESHOLD = (int) (20.0f * scale + 0.5f);

这是我的onFling函数:
public boolean onFling (MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Log.d("OnePageGallery:onFling:",String.format("VX:%f, VY:%f", velocityX, velocityY));
// cap the velocityX to scroll only one page
if (velocityX>FLINGTHRESHOLD) {
return super.onFling(e1, e2, SPEED, velocityY);
} else if (velocityX<-FLINGTHRESHOLD) {
return super.onFling(e1, e2, -SPEED, velocityY);
} else {
return super.onFling(e1, e2, velocityX, velocityY);
}
}


分享到:
评论
2 楼 mengsina 2012-03-14  
ldci3gandroid 写道
给力 谢谢你吖 帮我了一个大忙

呵呵,我也是共享别人的代码。但是能帮到你很高兴。
1 楼 ldci3gandroid 2012-03-14  
给力 谢谢你吖 帮我了一个大忙

相关推荐

    Android 滑动效果 Gallery

    在早期的Android版本中,Gallery类被广泛用于实现这种效果,但在Android 4.0 (API级别14)之后,它已被废弃,取而代之的是更灵活且功能更强大的RecyclerView和ViewPager。 **Gallery类详解** Gallery是一个线性布局...

    android实现横向滑动解决Gallery从中间滑动的问题

    在Android开发中,有时我们需要创建一个可以横向滑动的视图,类似相册的效果,这在Android早期版本中是通过Gallery组件实现的。然而,Gallery组件在API 16之后就被弃用了,开发者们转向使用其他的组件来替代,如...

    自定义view实现垂直gallery滚动

    总的来说,实现这样一个自定义垂直滚动Gallery,需要深入理解Android的触摸事件处理、视图绘制机制、动画系统以及性能优化策略。这是一个挑战性但富有成就感的任务,可以锻炼开发者对Android底层框架的理解和掌控...

    Android 两个gallery同时滑动

    当需要两个`Gallery`组件同时滑动时,我们可能希望实现一种联动效果,即在一个`Gallery`上滑动时,另一个`Gallery`也随之同步滑动。这在设计上可以提升用户体验,让用户在浏览多个关联内容时更加方便。 要实现这个...

    UI开发第七篇之Android gallery实现图片的循环旋转

    在Android UI开发中,`Gallery`组件是一种可以展示多个项目并允许用户左右滑动选择的控件,常用于实现图片轮播或者选项选择等场景。本篇将详细讲解如何利用`Gallery`实现图片的循环旋转。 首先,我们需要在布局文件...

    android 自动滚动图片效果源码

    在Android开发中,实现自动滚动图片的效果是一种常见的需求,尤其在创建轮播图、广告栏或者相册应用时。这个源码是开发者个人实现的一种自动滚动图片的功能,它基于Android的`Gallery`组件。`Gallery`是Android SDK...

    Android 滑动效果 Gallery + GridView

    在Android开发中,滑动效果是用户界面设计中不可或缺的一部分,为用户提供流畅的交互体验。本主题主要聚焦于两种常见的滑动组件:Gallery和GridView,它们都是Android SDK中内置的视图组件,常用于展示多张图片或者...

    android运用gallery浏览图片并自动滑动

    在Android开发中,`Gallery`组件是一个非常实用的控件,它允许用户水平滚动查看一系列的项目,通常用于展示图片或者列表选择。然而,`Gallery`已经在API Level 16(Android 4.1, Jelly Bean)中被弃用,取而代之的是...

    android开发,gallery图片切换

    在Android开发中,`Gallery`组件是一个非常实用的控件,它允许用户通过左右滑动来浏览和选择项目,常用于图片浏览、菜单选择等场景。在这个特定的案例中,我们关注的是如何实现图片的自动切换功能,这在创建图片轮播...

    android滚动插件

    在Android开发中,滚动插件通常用于实现动态、吸引人的用户界面,比如轮播图、滑动图片广告等。这些组件能够展示多张图片,并且往往支持自动无限滚动,为应用增加互动性和视觉吸引力。本篇文章将深入探讨Android中...

    Android Gallery 左对齐,点击禁止滑动 demo

    在Android开发中,`Gallery`组件是早期版本中用于展示一系列水平滚动项目的一个视图控件,常用于图片或选项的浏览。然而,`Gallery`在API 16(Android 4.1 Jelly Bean)之后已被弃用,取而代之的是更强大的`...

    Android3D画廊Gallery实现无限循环和自动跳转

    在Android开发中,3D Gallery是一种独特且引人入胜的图像展示方式,它通过模拟3D空间中的图片浏览,给用户带来更加生动的交互体验。本教程将深入讲解如何在Android应用中实现一个3D画廊(Gallery)组件,支持无限...

    Android Gallery+ActivityGroup实现滑动TAB独立Activity

    总结起来,"Android Gallery+ActivityGroup实现滑动TAB独立Activity"是一种早期的Android开发技术,虽然现在已经被更先进的Fragment所取代,但理解这一模式对于理解Android应用的演化历程以及如何处理旧代码库中的...

    android之文字滚动栏

    在Android开发中,"文字滚动栏"是一种常见的UI元素,尤其在新闻应用、公告界面或者信息展示中,用于展示过多文字内容。这个标题所指的可能是实现一个自定义的TextView或者一个滚动视图,能够自动滚动显示超出视图...

    Android-使用recyclerView实现画廊滑动效果

    在Android应用开发中,RecyclerView是一个强大的视图组件,它用于高效地展示大量数据集,并且支持动态添加、删除数据项。本教程将详细介绍如何利用RecyclerView实现一个画廊滑动效果,这种效果通常在图片浏览应用...

    Android Gallery 3张图无限循环 左右滑动都有效

    在这个场景中,提到的"Android Gallery 3张图无限循环 左右滑动都有效"是指一个特定的实现,即在`Gallery`中加载三张图片,并且当用户向左或向右滑动时,图片能够无缝地循环,形成一种无限滚动的效果。下面将详细...

    gallery 图片自动滑动

    在Android开发中,`Gallery`是一个旧版的视图控件,用于展示可横向滑动的项目列表,通常用于图片或选项的展示。然而,自Android 3.0(API级别11)起,`Gallery`已被`ViewPager`所替代,因为`ViewPager`提供了更灵活...

    android自定义Gallery Demo实现随手滑动随停去掉两边空白

    在Android开发中,`Gallery`组件是一个非常实用的控件,它允许用户通过左右滑动来展示一系列的图片或视图。然而,原生的`Gallery`存在一些问题,比如默认情况下会有一定的空白间隙,以及在快速滑动时可能会导致定位...

    UI开发之Android gallery实现图片的循环旋转

    在Android UI开发中,`Gallery`组件是一种可以展示多个图片并允许用户左右滑动选择的控件。在本文中,我们将深入探讨如何实现`Gallery`控件的图片循环旋转功能。 首先,我们要确保正确地初始化`Gallery`。在布局XML...

    C# Android Gallery-Dome 图片滑动效果显示

    在Android开发中,实现图片滑动效果是一种常见的需求,尤其在创建相册或者展示产品图集时。"C# Android Gallery-Dome 图片滑动效果显示"是一个项目,旨在利用C#语言为Android平台构建一个类似原生Gallery的图片浏览...

Global site tag (gtag.js) - Google Analytics