取消excel横向滑动,取消wps横向滑动

访客3年前黑客工具904

这篇文章主要介绍了Android中实现水平滑动(横向滑动)ListView示例,本文用自己封装一个控件的 *** 解决了这个需求,需要的朋友可以参考下  水平的ListView-HorizontalListView的使用  Android中ListView默认的是竖直方向的滑动,由于项目的需求,需要ListView是水平滑动的。

有很多的方式可以实现,但是比较好的一种方式就是自己封装一个控件,使用方式和ListView的使用方式是一样的。

需要完善的地方:获取到的图片大小没有处理。

在界面上展示的是图片的原大小。

为了更好的展示效果,应该压缩成统一的尺寸。

  HorizontalListView.java 代码如下:  ?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361/*** 横向的ListView** * @author scd**/public class HorizontalListView extends AdapterViewListAdapter {public boolean mAlwaysOverrideTouch = true;protected ListAdapter mAdapter;private int mLeftViewIndex = -1;private int mRightViewIndex = 0;protected int mCurrentX;protected int mNextX;private int mMaxX = Integer.MAX_VALUE;private int mDisplayOffset = 0;protected Scroller mScroller;private GestureDetector mGesture;private QueueView mRemovedViewQueue = new LinkedListView();private OnItemSelectedListener mOnItemSelected;private OnItemClickListener mOnItemClicked;private OnItemLongClickListener mOnItemLongClicked;private boolean mDataChanged = false;public HorizontalListView(Context context, AttributeSet attrs) {super(context, attrs);initView();}private synchronized void initView() {mLeftViewIndex = -1;mRightViewIndex = 0;mDisplayOffset = 0;mCurrentX = 0;mNextX = 0;mMaxX = Integer.MAX_VALUE;mScroller = new Scroller(getContext());mGesture = new GestureDetector(getContext(), mOnGesture);}@Overridepublic void setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener) {mOnItemSelected = listener;}@Overridepublic void setOnItemClickListener(AdapterView.OnItemClickListener listener) {mOnItemClicked = listener;}@Overridepublic void setOnItemLongClickListener(AdapterView.OnItemLongClickListener listener) {mOnItemLongClicked = listener;}private DataSetObserver mDataObserver = new DataSetObserver() {@Overridepublic void onChanged() {synchronized (HorizontalListView.this) {mDataChanged = true;}invalidate();requestLayout();}@Overridepublic void onInvalidated() {reset();invalidate();requestLayout();}};@Overridepublic ListAdapter getAdapter() {return mAdapter;}@Overridepublic View getSelectedView() {// TODO: implementreturn null;}@Overridepublic void setAdapter(ListAdapter adapter) {if (mAdapter != null) {mAdapter.unregisterDataSetObserver(mDataObserver);}mAdapter = adapter;mAdapter.registerDataSetObserver(mDataObserver);reset();}private synchronized void reset() {initView();removeAllViewsInLayout();requestLayout();}@Overridepublic void setSelection(int position) {// TODO: implement}private void addAndMeasureChild(final View child, int viewPos) {LayoutParams params = child.getLayoutParams();if (params == null) {params = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);}addViewInLayout(child, viewPos, params, true);child.measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.AT_MOST),MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.AT_MOST));}@Overrideprotected synchronized void onLayout(boolean changed, int left, int top,int right, int bottom) {super.onLayout(changed, left, top, right, bottom);if (mAdapter == null) {return;}if (mDataChanged) {int oldCurrentX = mCurrentX;initView();removeAllViewsInLayout();mNextX = oldCurrentX;mDataChanged = false;}if (mScroller.computeScrollOffset()) {int scrollx = mScroller.getCurrX();mNextX = scrollx;}if (mNextX = 0) {mNextX = 0;mScroller.forceFinished(true);}if (mNextX = mMaxX) {mNextX = mMaxX;mScroller.forceFinished(true);}int dx = mCurrentX - mNextX;removeNonVisibleItems(dx);fillList(dx);positionItems(dx);mCurrentX = mNextX;if (!mScroller.isFinished()) {post(new Runnable() {@Overridepublic void run() {requestLayout();}});}}private void fillList(final int dx) {int edge = 0;View child = getChildAt(getChildCount() - 1);if (child != null) {edge = child.getRight();}fillListRight(edge, dx);edge = 0;child = getChildAt(0);if (child != null) {edge = child.getLeft();}fillListLeft(edge, dx);}private void fillListRight(int rightEdge, final int dx) {while (rightEdge dx getWidth() mRightViewIndex mAdapter.getCount()) {View child = mAdapter.getView(mRightViewIndex,mRemovedViewQueue.poll(), this);addAndMeasureChild(child, -1);rightEdge = child.getMeasuredWidth();if (mRightViewIndex == mAdapter.getCount() - 1) {mMaxX = mCurrentX rightEdge - getWidth();}if (mMaxX 0) {mMaxX = 0;}mRightViewIndex ;}}private void fillListLeft(int leftEdge, final int dx) {while (leftEdge dx 0 mLeftViewIndex = 0) {View child = mAdapter.getView(mLeftViewIndex,mRemovedViewQueue.poll(), this);addAndMeasureChild(child, 0);leftEdge -= child.getMeasuredWidth();mLeftViewIndex--;mDisplayOffset -= child.getMeasuredWidth();}}private void removeNonVisibleItems(final int dx) {View child = getChildAt(0);while (child != null child.getRight() dx = 0) {mDisplayOffset = child.getMeasuredWidth();mRemovedViewQueue.offer(child);removeViewInLayout(child);mLeftViewIndex ;child = getChildAt(0);}child = getChildAt(getChildCount() - 1);while (child != null child.getLeft() dx = getWidth()) {mRemovedViewQueue.offer(child);removeViewInLayout(child);mRightViewIndex--;child = getChildAt(getChildCount() - 1);}}private void positionItems(final int dx) {if (getChildCount() 0) {mDisplayOffset = dx;int left = mDisplayOffset;for (int i = 0; i getChildCount(); i ) {View child = getChildAt(i);int childWidth = child.getMeasuredWidth();child.layout(left, 0, left childWidth,child.getMeasuredHeight());left = childWidth child.getPaddingRight();}}}public synchronized void scrollTo(int x) {mScroller.startScroll(mNextX, 0, x - mNextX, 0);requestLayout();}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {boolean handled = super.dispatchTouchEvent(ev);handled |= mGesture.onTouchEvent(ev);return handled;}protected boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {synchronized (HorizontalListView.this) {mScroller.fling(mNextX, 0, (int) -velocityX, 0, 0, mMaxX, 0, 0);}requestLayout();return true;}protected boolean onDown(MotionEvent e) {mScroller.forceFinished(true);return true;}private OnGestureListener mOnGesture = new GestureDetector.SimpleOnGestureListener() {@Overridepublic boolean onDown(MotionEvent e) {return HorizontalListView.this.onDown(e);}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {return HorizontalListView.this.onFling(e1, e2, velocityX, velocityY);}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) {synchronized (HorizontalListView.this) {mNextX = (int) distanceX;}requestLayout();return true;}@Overridepublic boolean onSingleTapConfirmed(MotionEvent e) {for (int i = 0; i getChildCount(); i ) {View child = getChildAt(i);if (isEventWithinView(e, child)) {if (mOnItemClicked != null) {mOnItemClicked.onItemClick(HorizontalListView.this,child, mLeftViewIndex 1 i,mAdapter.getItemId(mLeftViewIndex 1 i));}if (mOnItemSelected != null) {mOnItemSelected.onItemSelected(HorizontalListView.this,child, mLeftViewIndex 1 i,mAdapter.getItemId(mLeftViewIndex 1 i));}break;}}return true;}@Overridepublic void onLongPress(MotionEvent e) {int childCount = getChildCount();for (int i = 0; i childCount; i ) {View child = getChildAt(i);if (isEventWithinView(e, child)) {if (mOnItemLongClicked != null) {mOnItemLongClicked.onItemLongClick(HorizontalListView.this, child, mLeftViewIndex 1 i,mAdapter.getItemId(mLeftViewIndex 1 i));}break;}}}private boolean isEventWithinView(MotionEvent e, View child) {Rect viewRect = new Rect();int[] childPosition = new int[2];child.getLocationOnScreen(childPosition);int left = childPosition[0];int right = left child.getWidth();int top = childPosition[1];int bottom = top child.getHeight();viewRect.set(left, top, right, bottom);return viewRect.contains((int) e.getRawX(), (int) e.getRawY());}};}  适配器 HorizontalListViewAdapter .java如下:  ?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293public class HorizontalListViewAdapter extends BaseAdapter {/** 上下文 */private Context mContext;/** 图像数据源 */private ArrayListMapString, Integer mImageList;/** 数据源 */private ArrayListMapString, Integer mTextList;/** Image */private static String IMAGE = ic_;private MapString, Integer mMap = null;/** 构造 *** */public HorizontalListViewAdapter(Context context) {this.mContext = context;initData();}/** 初始化数据 */public void initData() {mImageList = new ArrayListMapString, Integer();/** 反射技术*/Class? imageClzz = R.drawable.class;R.drawable instance = new R.drawable();// 取得drawable类中所有的字段Field[] fields = imageClzz.getDeclaredFields();for (Field field : fields) {// 获得字段的名字String name = field.getName();if (name != null name.startsWith(IMAGE)) {try {mMap = new HashMapString, Integer();mMap.put(IMAGE, (Integer) field.get(instance));mImageList.add(mMap);} catch (IllegalAccessException e) {e.printStackTrace();}}}}@Overridepublic int getCount() {return mImageList.size();}@Overridepublic MapString, Integer getItem(int position) {return mImageList == null ? null : mImageList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {holder = new ViewHolder();convertView = LayoutInflater.from(mContext).inflate(R.layout.horizontal_list_item, null);holder.mImage = (ImageView) convertView.findViewById(R.id.iv_list_item);holder.mTitle = (TextView) convertView.findViewById(R.id.tv_list_item);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}if (position == mSelectIndex) {convertView.setSelected(true);} else {convertView.setSelected(false);}holder.mImage.setImageResource(getItem(position).get(IMAGE));return convertView;}private class ViewHolder {/** 图像 */private ImageView mImage;}}

相关文章

赵浩楠个人简介、照片(西安最帅售票员)

赵浩楠个人简介、照片(西安最帅售票员)

本期的新人推荐,大视菌给大家介绍一位老朋友。2015年,一组在由西安火车站发往秦始皇兵马俑的市营306路公交车上的工作照片在网络上沸腾,#西安最帅售票员#话题引爆话题榜,赵浩楠,当时21岁的90后...

怎样快速盗微信? 「怎么偷上别人的微信 不被知

本文将引领读者打造一个初级的内核级Rootkit,然后为其引入两种简单的隐形技术:进程隐形技术和文件隐形技术。同时,为了让读者获得rootkit编程的相关经验,我们顺便介绍了rootkit的装载、卸载...

2018真实的网络赚钱项目,亲测10个可以做的兼职

2018真实的网络赚钱项目,亲测10个可以做的兼职

任何的网络赚钱不是一蹴而就的,必须是辛苦的汗水+好的思路才能形成,后期轻松的赚钱。 别人让你赚取到一定的收入,你要经常问自己,我能给别人带来什么样的帮助? 第一大平台:淘宝 在乔一的观念中,始终...

湖北确诊病例破万怎么回事?湖北新型肺炎疫情最新情况新增病例2103例

据湖北省卫健委网站消息,2020年2月2日0时-24时,湖北省新增新型冠状病毒感染的肺炎病例2103例(其中:武汉市1033例、黄石市82例、十堰市44例、襄阳市107例、宜昌市39例、荆州市166例...

详细分析Binder中的单指令竞态标准漏洞(一)

详细分析Binder中的单指令竞态标准漏洞(一)

在文中中,大家将为阅读者深层次详细介绍Binder中的单指令竞态标准漏洞以及利用方式。 在上年10月份的安卓系统安全性公示中,漏洞CVE-2020-0423被公布,实际叙述以下: 在binder....

辣百川麻辣烫品牌怎么样?基础雄厚为你带来稳定财富

辣百川麻辣烫品牌怎么样?基础雄厚为你带来稳定财富

餐饮市场前景长短常的辽阔的,而且尚有着浩瀚的优质品牌呈此刻我们的糊口傍边,许多想要创业的人对付品牌的选择长短常纠结的,不知道该如何选择,那么本日就来看看辣百川麻辣烫加盟这个品牌吧。辣百川麻辣烫加盟用本...