android 5.0 Launcher3,Gallery2中响应按键,实现翻页效果
2015-11-27 16:15
585 查看
最近做的项目中有需要实现在桌面(Launcher3)和 图库(Gallery2)上响应按键事件,实现桌面翻页(类似滑动翻页),以及图库图片查看时翻页(查看下一张图片)。
网上找资料没有具体说在代码哪个地方去具体实现,折腾了两三天终于解决此问题,现把修改方案纪录下,共参考。
图库 Gallery2中实现查看图片时响应按键事件翻页效果代码:
Launcher3中实现响应按键事件翻页效果代码:
网上找资料没有具体说在代码哪个地方去具体实现,折腾了两三天终于解决此问题,现把修改方案纪录下,共参考。
图库 Gallery2中实现查看图片时响应按键事件翻页效果代码:
public class AbstractGalleryActivity extends Activity implements GalleryContext { ....... // Added by Janning begin @Override public boolean dispatchKeyEvent(KeyEvent event) { // TODO Auto-generated method stub mGLRootView.dispatchKeyEventView(event); return super.dispatchKeyEvent(event); } // Added by Janning end } public class GLRootView extends GLSurfaceView implements GLSurfaceView.Renderer, GLRoot { .......... // Added by Janning begin public void dispatchKeyEventView(KeyEvent event) { mRenderLock.lock(); try { if (mContentView != null) { mContentView.dispatchKeyEvent(event); } } finally { mRenderLock.unlock(); } } // Added by Janning end }public class GLView { .......... // Added by Janning begin protected void dispatchKeyEvent(KeyEvent event) { for (int i = getComponentCount() - 1; i >= 0; --i) { GLView component = getComponent(i); if (component.getVisibility() != GLView.VISIBLE) continue; if (component != null) { component.onKeyEvent(event); } } } protected void onKeyEvent(KeyEvent event) { } // Added by Janning end }public class PhotoView extends GLView { ........... private boolean slideToNextPicture() { if (mNextBound <= 0) return false; switchToNextImage(); mPositionController.startHorizontalSlide(); return true; } private void switchToNextImage() { mModel.moveTo(mModel.getCurrentIndex() + 1); } protected void onKeyEvent(KeyEvent event) { // Added by Janning begin // for handling the page down key event to implement switch to next image int keyCode = event.getKeyCode(); int action = event.getAction(); Log.d(TAG + "/SLCODE", " keyEvent: " + event + " -- mNextBound: " + mNextBound); if (KeyEvent.KEYCODE_PAGE_DOWN == keyCode && KeyEvent.ACTION_DOWN == action) { if (mNextBound <= 0) { switchToFirstImage(); // because the index '0' is Camera activity, // so switch to the second one(index is '1') if (mModel.isCamera(0)) { mModel.moveTo(1); } } else { slideToNextPicture(); } } // Added by Janning end } }
Launcher3中实现响应按键事件翻页效果代码:
public class DragLayer extends FrameLayout implements ViewGroup.OnHierarchyChangeListener { 。。。。。 @Override public boolean dispatchKeyEvent(KeyEvent event) { boolean handled = mDragController.dispatchKeyEvent(event) || super.dispatchKeyEvent(event); // Added by Janning begin // For responsing the desktop sliding around LauncherLog.d("SLCODE", TAG + " dispatchKeyEvent KeyEvent: " + event); handled = mLauncher.getWorkspace().dispatchKeyEvent(event); // Added by Janning end if (LauncherLog.DEBUG_KEY) { LauncherLog.d(TAG, "dispatchKeyEvent: keycode = " + event.getKeyCode() + ", action = " + event.getAction() + ", handled = " + handled); } return handled; } }/** * The workspace is a wide area with a wallpaper and a finite number of pages. * Each page contains a number of icons, folders or widgets the user can * interact with. A workspace is meant to be used with a fixed width only. */ public class Workspace extends SmoothPagedView implements DropTarget, DragSource, DragScroller, View.OnTouchListener, DragController.DragListener, LauncherTransitionable, ViewGroup.OnHierarchyChangeListener, Insettable { .......... private void moveToScreen(int page, boolean animate) { if (!workspaceInModalState()) { if (animate) { snapToPage(page); } else { setCurrentPage(page); } } View child = getChildAt(page); if (child != null) { child.requestFocus(); } } // Added by Janning begin // For responding the KeyEvent to control desktop sliding around @Override public boolean dispatchKeyEvent(KeyEvent event) { int keyCode = event.getKeyCode(); int action = event.getAction(); if (KeyEvent.KEYCODE_PAGE_DOWN == keyCode && KeyEvent.ACTION_UP == action) { int size = mScreenOrder.size(); LauncherLog.d("SLCODE", TAG + " onKeyDown screen size: " + size + " -- currentPage: " + mCurrentPage); if (mCurrentPage == size-1) { moveToScreen(0, true); } else if (mCurrentPage < size-1) { moveToScreen(mCurrentPage+1, true); } return true; } return false; } // Added by Janning end }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories