拖拽,滑动

QQQQQQQQQQQ.png

其实linearLayout和控件都是继承自View。拖拽的原理是一样的。在拖拽容器时,新建一个bitmap,在bitmap上画这个容器,包括他的控件,之后显示在windowmanager上。把之前的linearLayout隐藏

ListView拖拽移动位置

QQ截图20121218160913.png1354206807_6198.gif

setting 拖拽

t.jpg

在Android上,触摸事件由一系列事件构成。首先,用户将手指放在屏幕的一个元素上,该元素接收到一个ACTION_DOWN事件。然后,用户保持手指在屏幕上,将手指移动到一个新的位置。该元素接收到一系列ACTION_MOVE事件。最后,用户拿起手指,这时,该元素接收到一个ACTION_UP事件

  Android上的touch事件有两个重要的特点:

一.touch事件会被转移。如果一个子控件在它的onTouchEvent句柄中返回false,它将忽略第一个事件(ACTION_DOWN),而父级的onTouchEvent举办将接收此事件,除非其中一个祖先控件同意处理该事件或者是事件到达根控件,不然这个激活的事件将一直被传播;

二.父级可以在子控件的onTouchEvent句柄被激活前拦截触摸事件。可以通过重载父级的onInterceptTouchEvent方法,并返回true来实现这点。结果是,子控件的onTouchEvent句柄将被忽略,而父级的onTouchEvent将被激活。

  下图表示touch事件转移的过程:

123.jpg

我们需要在父级和子级控件中设置onTouchEvent句柄。在子级句柄中,我们将子元素保存为将被拖动的项,并返回false,这样一系列的子事件将被传达到父级句柄。在父级句柄中,我们改变子视图的边来适应手指的位置,这样子视图就可以跟随我们的手指移动了。实现的效果就是在界面上拖动这一个按钮到处跑。

左右滑动的效果,中间界面的内容不是图片,而是一个layout,布局格式都是一样的,只是里面的数据都是从服务器接口中取的,现在就是要实现左右来回滑动,下面是资料
html.rar,ViewFlipper的中放置layout如何去实现,放置图片,我会,但是现在从服务器取回的数据,item的数目一次是20条,这样每次滑动一个页面的时候,数据都变了。附件里面的html有2个画面,现在就是要把每个画面做成一个界面,下面的地址是接口访问地址:http://wwwtest.qidian.com:8099/B … .ashx?GroupId=11458

{"Result":0,"Message":"成功","Data":
[{"BookId":2574291,"BookName":"醉枕香江","AuthorId":1741620,"AuthorName":"忧郁的青蛙","ImageStatus":1,"LastUpdateChapterID":43939411,"LastUpdateChapterName":"第一卷 一曲新词酒一杯 上架前的话","LastChapterUpdateTime":1362092941000,"IsVip":1,"LastVipUpdateChapterId":44495487,"LastVipUpdateChapterName":"【最后一次单章求月票】","LastVipChapterUpdateTime":1364649338000,"CategoryName":"都市","SubCategoryName":"娱乐明星","BookStatus":"新书上传","ShowTime":1364709600000,"BookIntro":"主角重生回到80年代的香港,靠着未来的记忆写剧本,写小说,写歌,赚钱泡美女,作者在情节和文笔的把握上非常到位,将那个时代的事情写了活灵活现,对很多明星的成长史都有着深刻的理解","Description":"  一梦三十年,他回到了香港电影里跑马跳舞、纸醉金迷的黄金年代。从此,香港四大才子中少了一位美食专家,多了一位花心大圣。\u003cbr\u003e  在他26岁生日时,顶着最美港姐头衔的李佳欣包下整版报纸,以粉红色鲜花图案示爱,署名“LoveYou”。于是,拥有亚洲第一美腿的王组贤也不甘示弱,投了个新车牌,开出来,上面写着“1314”。\u003cbr\u003e  玉女掌门周彗敏在东京开演唱会,他去捧场,后面跟着全香港八卦杂志派出的狗仔联队。事后有记者采访素有性感女神之称的钟楚虹,红姑报复性地笑了笑,说,我们从没有说过要分手,你们不知道么?\u003cbr\u003e  那一年,冠希还不会拍照,宗瑞也不会下药,这里只有英雄美人,香港往昔,还有一座城市的喧嚣与寂寞。\u003cbr\u003e  且看林宥伦如何繁华入袖,醉枕香江。"},
{"BookId":2411032,"BookName":"神医圣手","AuthorId":180925,"AuthorName":"小小羽","ImageStatus":1,"LastUpdateChapterID":41532113,"LastUpdateChapterName":"作品相关 封推感言","LastChapterUpdateTime":1349159268000,"IsVip":1,"LastVipUpdateChapterId":44497361,"LastVipUpdateChapterName":"第七七一章 问题表妹","LastVipChapterUpdateTime":1364653476000,"CategoryName":"都市","SubCategoryName":"都市生活","BookStatus":"新书上传","ShowTime":1363068000000,"BookIntro":"拥有祖传医术的张阳穿越成一个医学院的大三学生,用自己的针灸之术救下一个因误诊而意外去世的女孩,从而激活圣手系统,通过完成系统平台的各种任务而领取奖励,比较有创意的医生文,暧昧剧情把握的不错,值得一阅。","Description":"  他是名医,也是神医。\u003cbr\u003e  就算是死神盯着的人,有他在,死神也要乖乖绕道而行。\u003cbr\u003e  只要你相信他,你的任何疾病都不在是问题。\u003cbr\u003e  这就是张阳,一个被称为上帝使者的人,一个有点张扬,但很可爱的人!\u003cbr\u003e  …………\u003cbr\u003e  小羽新书,恳求新老朋友们继续支持,这是小羽第五本书,已有四本老书完本,请朋友们放心收藏!\u003cbr\u003e  新建书友新群,喜欢本书,支持本书的朋友可以共同进来探讨,群号:146203975"}
]}
类似于蘑菇街那样的PHP+MYSQL 程序
QQ截图20120723162752.jpg未命名.jpg
整个一个图框是一个自定义控件,一个linearlayout里面加一个imageview和一个textview(暂时不管那个什么喜欢评论啥的)。imageview高度设置成warpcontent,宽度固定。然后你肯定是载入一个list,里面有图和文字,然后把文字和图片加进去就可以了。
至于外面的大框架也就是一个纵向的linearlayout,你把一个个的自定义控件加进去就可以了。
至于那个底部那个圆角的矩形,我想了想可能麻烦一点,但也不是没有办法。单独使用一个圆角矩形作为自定义控件的背景去适应自定义控件大小可能不太好,因为拉伸应该会使圆角角度有变化。没用过9png,不知道9png能不能解决这个问题。
如果只是一般的图片的话,其实也很好解决。这个底部矩形分为3个部分,上面是圆角部分,中间正常矩形部分,下面也是圆角矩形部分。将有变化的区域都放到中间这个部分,中间这个部分的矩形让它自适应控件大小,上下不变。至于一些个边框的问题,ps轻松搞定。
左侧隐藏菜单右边显示content)demo
1.png2.png1.png

滑动菜单SlidingMenu的实现

layout_right:这个大布局文件,layout_left:距离左边50dp像素.(我们要移动的是layout_left). 其实:我们就是把layout_left这个布局控件整理向左移动,至于移动多少,就要看layout_right有多宽了。layout_left移动到距离左边的边距就是layout_right的宽及-getMAX_WIDTH.  因为分辨率的问题.因此就用ViewTreeObserver进行对layout_left设置宽度. ViewTreeObserver,这个类主要用于对布局文件的监听

public boolean onCreateOptionsMenu(Menu menu):使用此方法调用OptionsMenu
在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)
Item的属性:orderInCategory,它的取值是0-0xffff之间的整数。也是设置排序顺序的。它跟第一个属性menuCategory 有啥关系呢?就是一个菜单项最终的Order值是MenuCategory值与orderInCategory值相加的结果。
默认样式是在屏幕底部弹出一个菜单,这个菜单我们就叫他选项菜单OptionsMenu,一般情况下,选项菜单最多显示2排每排3个菜单项,这些菜单项有文字有图标,也被称作Icon Menus,如果多于6项,从第六项开始会被隐藏,在第六项会出现一个More里,点击More才出现第六项以及以后的菜单项,这些菜单项也被称作Expanded Menus。

Swipe在android里面是叫Fling
一个划动的手势有几个特征, 比如是在x或者y轴上近乎直线的划动, 中途路径的偏差不能太大, 而且划动需要一定的速度, 所以我们定义几个定量:

private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;

然后在onFling方法中, 判断是不是一个合理的swipe动作:

if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideLeftIn);
viewFlipper.setOutAnimation(slideLeftOut);
viewFlipper.showNext();
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideRightIn);
viewFlipper.setOutAnimation(slideRightOut);
viewFlipper.showPrevious();
}
这里viewFlipper是含有多个view的一个container, 可以很方便的调用prev/next view, 加上animation动画, 可以达到一些不错的效果:
viewFlipper = (ViewFlipper)findViewById(R.id.flipper);
slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);
slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out);
slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);
在Activity中override onTouch方法来获取手势action:
@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event))
return true;
else
return false;
}

主要分两个大的方向:

  1.     拖,拉,拽,扩大,缩小 在本屏幕操作
  2.     翻屏是的额外的做,也并不是随意的就能翻屏,必须满足条件

但是当我们实现OnTouchListener 时候,他提供的只有 ACTION_DOWNACTION_MOVE,ACTION_UP 等操作,所以我们必须分情况,并且是三种情况:

  •    第一种: none  可能用户什么也不做
  •    第二种: DRAG  滑屏
  •    第三种: ZOOM 扩大缩小

ListView调用异步加载

是在适配器的getView方法里进行的。在ViewPager的适配器类里,没有getView这个方法,但有一个类似的方法:instantiateItem。ViewPager可以设置OnPageChangeListener监听器,而OnPageChangeListener中有一个onPageSelected方法。从名字上可以看出,该方法是当前页面被“选中”(即显示出来)时调用的方法,因此可考虑在该方法中进行异步加载。

BaseAdapter是实现了ListAdapter和SpinnerAdapter两个接口,当然它也可以直接给ListView和Spinner等UI组件直接提供数据。

Adapter的作用

就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View

public View getView(int position, View convertView, ViewGroup parent) {
//针对每一个数据(即每一个图片ID)创建一个ImageView实例,
ImageView iv = new ImageView(context);//针对外面传递过来的Context变量,
iv.setImageResource(imgs[position]);
Log.i(“magc”, String.valueOf(imgs[position]));
iv.setLayoutParams(new Gallery.LayoutParams(80, 80));//设置Gallery中每一个图片的大小为80*80。
iv.setScaleType(ImageView.ScaleType.FIT_XY);
return iv;
}

imageView.setTag(imageUrl),setTag是存储数据的,这样是为了保证在回调函数时,listview去更新自己对应item,

Android裁剪图片为圆形图片

有个比屏幕尺寸大的图片,现在想让图片的宽度填满屏幕的宽度,长度不设限制

类似于看漫画的的软件,就是上下方向是拖动图片,左右方向是翻页!如何能实现宽度限制,高度不限制1 1
layout_weight
目前最为推荐的Android多屏幕自适应解决方案:android:layout_weight="1" 传统的layout_weight使用方法是将当前控件的layout_widthlayout_height都设置成fill_parent,这样就可以把控件的显示比例完全交给layout_weight该属性的作用是决定控件在其父布局中的显示权重,一般用于线性布局中。其值越小,则对应的layout_width或layout_height的优先级就越高,一般横向布局中,决定的是layout_width的优先级;纵向布局中,决定的是layout_height的优先级。
0px设值法
layout_height=0px的写法,结合layout_weight,却可以使控件成正比例显示,轻松解决了当前Android开发最为头疼的碎片化问题之一。
上下滑动是当前Activity的滚动 左右滑动是切换不同的Activity
监控触屏事件和手势事件,在触屏事件处理函数中调用手势事件处理函数,表示用户触屏后是否有手势操作,有则进行手势事件处理,大致分为四步:
Translate动画是非常好理解,就是定义一个开始的位置和一个结束位置,定义移动时间,然后就能自动产生移动动画。
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

生活在西班牙

自己动手丰衣足食

BlueAsteroid

Just another WordPress.com site

Jing's Blog

Just another WordPress.com site

Start from here......

我的心情魔方

天才遠私廚

希望能做一個分享各種資訊的好地方

语义噪声

西瓜大丸子汤的博客

笑对人生,傲立寰宇

Just another WordPress.com site

Where On Earth Is Waldo?

A Project By Melanie Coles

the Serious Computer Vision Blog

A blog about computer vision and serious stuff

Cauthy's Blog

paper review...

Cornell Computer Vision Seminar Blog

Blog for CS 7670 - Special Topics in Computer Vision

datarazzi

Life through nerd-colored glasses

Luciana Haill

Brainwaves Augmenting Consciousness

槑烎

1,2,∞

Dr Paul Tennent

and the university of nottingham

turn off the lights, please

A bunch of random, thinned and stateless thoughts around the Web

%d bloggers like this: