android gallery 竖直(上下)滑动

来源:互联网 发布:广西网络广电局 编辑:程序博客网 时间:2024/05/19 22:44

最近做一个项目,要求上下滑动gallery,网上找了好多资料都不太理想,不说了,说多了都是泪啊!

先上图:免得误导观众!


下面说一下我的方法:

1,重写VerticalGallery类继承Gallery

public class VerticalGallery extends Gallery

2.重写ondrow方法,使gallery逆时针旋转

@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
canvas.translate(0, 600f);
canvas.rotate(-90f);
super.onDraw(canvas);
}

3,重写onkeydown方法,使之上下键响应上下翻页;我是上下键调用的左右方法;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub


switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
return super.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, event);
case KeyEvent.KEYCODE_DPAD_DOWN:
return super.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, event);
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_RIGHT:
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
break;
default:
break;
}
return super.onKeyDown(keyCode, event);
}

这里左右键的释放,我是找的一个全局变量来跳出gallery的;

有需要用到手势,和滑动的重写onfling方法和onscroll方法即可;我们用的遥控器,所以没写;

4,在VerticalGallery中旋转了,就得在适配器中把图片再旋转过来;

对适配器里的每一张图片调用这个函数

private Bitmap rotateBitmap(Bitmap bitmap) {
Bitmap bitmap2 = null;
Matrix matrix = new Matrix();
matrix.setRotate(90);
bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
return bitmap2;
}

5,在xml文件中调用;

<com.android.mslauncher.VerticalGallery
                android:id="@+id/gallery"
                android:layout_width="380dp"
                android:layout_height="440dp"
                android:layoutDirection="inherit" />

5,activity中调用你的VerticalGallery

gallery = (VerticalGallery) view1.findViewById(R.id.gallery);

imageViewGalleryFocus = (ImageView) view1.findViewById(R.id.gallery_focus);

gallery.setAdapter(adapter);

gallery.setOnFocusChangeListener(new onMainItemFocusChangeListener());
gallery.setSelection(GalleryImageAdapter.getPosition(), true);gallery.setAnimationDuration(500);

try {

gallery.setSpacing(20);

gallery.setUnselectedAlpha(0.5f);
// gallery.setMaxZoom(0);
// gallery.setMaxRotationAngle(60);
((GalleryImageAdapter) gallery.getAdapter()).notifyDataSetChanged();
} catch (Exception e) {
// TODO: handle exception
}


转载请注明出处:http://blog.csdn.net/didiao11300/article/details/16802381