进阶四之Android UI介面之(Gallery仿图像集浏览)
“还怕了我”通过精心收集,向本站投稿了5篇进阶四之Android UI介面之(Gallery仿图像集浏览),以下是小编整理后的进阶四之Android UI介面之(Gallery仿图像集浏览),仅供参考,希望能够帮助到大家。
篇1:进阶四之Android UI介面之(Gallery仿图像集浏览)
两个人共尝一个痛苦只有半个痛苦,两个人共享一个欢乐却有两个欢乐,
本讲内容:Gallery仿图像集浏览
一、基本原理
在 Activity 中实现 OnGestureListener 的接口 onFling 手势事件,通过自定义的 View 绘制draw() 图片
二、手势坐标介绍
下面示例中,用到了OnGestureListener接口的onScroll()和OnFling()方法,涉及到了Android系统坐标及触摸MotionEvent e1和e2、速度velocityX、velocityY等值
vcD4KPHA+CqOoMaOpTW90aW9uRXZlbnTW0CBlMcrHytbWuLXa0ru0zrC0yc/GwcS7tcTG8LXjo6xlMsrHzKfG8MrW1rjA67+qxsHEu7XE1tW146OsuPm+3cnPzbxBbmRyb2lkxsHEu9f4serPtb/J1qqjujwvcD4KPHA+CsrW1rjP8tPSu6y2r6Os1tW146OoZTKjqdTaxvC146OoZTGjqbXE09Ky4KOs09BlMi5nZXRYKCkgLSBlMS5nZXRYKCkgtPPT2jA8YnI+CsrW1rjP8tfzu6y2r6Os1tW146OoZTKjqdTaxvC146OoZTGjqbXE1/Oy4KOs09BlMi5nZXRYKCkgLSBlMS5nZXRYKCkg0KHT2jA8YnI+CsrW1rjP8s/Cu6y2r6Os1tW146OoZTKjqdTaxvC146OoZTGjqbXEz8Ky4KOs09BlMi5nZXRZKCkgLSBlMS5nZXRZKCkgtPPT2jA8YnI+CsrW1rjP8snPu6y2r6Os1tW146OoZTKjqdTaxvC146OoZTGjqbXEyc+y4KOs09BlMi5nZXRZKCkgLSBlMS5nZXRZKCkg0KHT2jA8L3A+CjxwPgo8YnI+CjwvcD4KPHA+CqOoMqOpb25TY3JvbGwoTW90aW9uRXZlbnQgZTEsIE1vdGlvbkV2ZW50IGUyLCBmbG9hdCBkaXN0YW5jZVgsIGZsb2F0IGRpc3RhbmNlWSk8L3A+CjxwPgpkaXN0YW5jZVijrMrHx7C688G9tM5jYWxstcRYvuDA66OssrvKx2Uy0+tlMbXEy67Gvb7gwOs8L3A+CjxwPgpkaXN0YW5jZVijrMrHx7C688G9tM5jYWxstcRZvuDA66OssrvKx2Uy0+tlMbXEtLnWsb7gwOs8YnI+CjwvcD4KPHA+Cr7fzOXK/SYjMjA1NDA7tcS3vc/yo6zH68/qvPvJz828o6jW0KOpPC9wPgo8cD4KPGJyPgo8L3A+CjxwPgqjqDOjqW9uRmxpbmcoTW90aW9uRXZlbnQgZTEsIE1vdGlvbkV2ZW50IGUyLCBmbG9hdCB2ZWxvY2l0eVgsIGZsb2F0IHZlbG9jaXR5WSkgPC9wPgo8cD4KdmVsb2NpdHlYo6zKx1jW4bXEw7/D68vZtsg8L3A+CjxwPgp2ZWxvY2l0eVmjrMrHWdbhtcTDv8Pry9m2yDwvcD4KPHA+Cr7fzOXK/SYjMjA1NDA7tcS3vc/yo6zH68/qvPvJz828o6jT0qOpPC9wPgo8cD4K19DPuLnbsuy/ydLUt6LP1qO6dmVsb2NpdHlYoaJ2ZWxvY2l0eVm1xLe9z/LT62Rpc3RhbmNlWKGiZGlzdGFuY2VZt73P8tX9usPP4Le0PC9wPgo8YnI+CjxwPjxicj4KPC9wPgo8cD5HYWxsZXJ5zbzP8byvtcTNvMas5K/AwNCnufuho9CnufvNvMjnz8Kjujxicj4KPC9wPgo8cD48aW1nIHNyYz0=”www.2cto.com/uploadfile/Collfiles/0314/2015031408421070.png“ alt=”“>
下面是FlingView.java文件:
public class FlingView extends View { private Bitmap bitmap; private Bitmap nBitmap; private Bitmap fBitmap; public int ffsetX = 0; public int ffsetY = 0; public int postion = 0; private Bitmap[] bitmaps; public FlingView(Context context, AttributeSet attrs) { super(context, attrs); } public FlingView(Context context, Bitmap[] bitmaps) { super(context); this.bitmaps = bitmaps; bitmap = getBitmap(0); nBitmap = getBitmap(1); } // 在滑动过程中,通过实现View的Draw()方法绘制图片,注意:此时需要同时绘制当前图片(获取焦点)和下一张图片(即将获取焦点)共两张图片 @Override public void draw(Canvas canvas) { Paint paint = new Paint(); Rect rect = new Rect(); canvas.drawColor(Color.BLACK); // 绘制当前图片 if (bitmap != null) { int left = offsetX; int top = offsetY; int right = offsetX + MainActivity.deviceScreenWidth; int bottom = offsetY + MainActivity.deviceScreenHeight; rect.set(left, top, right, bottom); canvas.drawBitmap(bitmap, null, rect, paint); } // 绘制下一张图片 if (offsetX< 0) { // 向左滑动 if (nBitmap != null) { int left = MainActivity.deviceScreenWidth + 15 + offsetX; int top = 0; int right = left + MainActivity.deviceScreenWidth; int bottom = MainActivity.deviceScreenHeight; rect.set(left, top, right, bottom); canvas.drawBitmap(nBitmap, null, rect, paint); } } else if (offsetX >0) { // 向右滑动 if (fBitmap != null) { int left = -MainActivity.deviceScreenWidth - 15 + offsetX; int top = 0; int right = left + MainActivity.deviceScreenWidth; int bottom = MainActivity.deviceScreenHeight; rect.set(left, top, right, bottom); canvas.drawBitmap(fBitmap, null, rect, paint); } } } public void handleScroll(int deltaX) { if (deltaX >0) { offsetX -= -deltaX; } else { offsetX += deltaX; } invalidate(); } boolean isFling = false; // 标记是否需要切换到下一张(滑动距离超过屏幕宽度的 1/3) boolean isFlingRight = false; // 标记为需要向右滑动 boolean isFlingLeft = false; // 标记为需要向左滑动 class MyAnimation extends Animation { private int tmpOffsetX; @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { tmpOffsetX = offsetX; super.initialize(width, height, parentWidth, parentHeight); setDuration(500); setFillAfter(true); setInterpolator(new LinearInterpolator()); } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { // Log.i(”bb“, ”offsetX==>“+offsetX); if (isFling) { // 需要滑动图片时根据方向来变换offsetX大小 if (tmpOffsetX >0) { ffsetX = (int) ((MainActivity.deviceScreenWidth - tmpOffsetX) * interpolatedTime + tmpOffsetX); } else { ffsetX = (int) ((-MainActivity.deviceScreenWidth - tmpOffsetX) * interpolatedTime + tmpOffsetX); } } else { // 不需要变换的情况 ffsetX = (int) (tmpOffsetX * (1 - interpolatedTime)); } invalidate(); } } // 动画结束后需要做一些工作 //在滑动图片结束后,需要做滑动动画后的处理,重新设置当前图片和当前图片的上一张和下一张的状态,为下次滑动做准备 @Override protected void onAnimationEnd() { if (isFlingRight) { // 向右滑动,position减1 nBitmap = bitmap; bitmap = fBitmap; fBitmap = null; postion = postion - 1; } else if (isFlingLeft) { // 向左滑动,position加1 fBitmap = bitmap; bitmap = nBitmap; nBitmap = null; postion = postion + 1; } isFlingRight = false; isFlingLeft = false; isFling = false; ffsetX = 0; if (fBitmap == null && ffsetX == 0) { // 如果前一张图片为空(向右滑),则重置前一张图片(position// - 1) if (postion >0) { fBitmap = getBitmap(postion - 1); } } else if (nBitmap == null && ffsetX == 0) { // 如果后一张图片为空(向左滑),则重置后一张图片(position // + 1) if (postion< bitmaps.length - 1) { nBitmap = getBitmap(postion + 1); } } clearAnimation(); } /** 获得当前位置的图片 */ public Bitmap getBitmap(int currentPos) { if (currentPos >bitmaps.length - 1) { return null; } Bitmap currBitmap = bitmaps[currentPos]; ffsetX = 0; ffsetY = 0; return currBitmap; } //获取来自Activity中的手势速度 public void onFling(int paramFloat1) { if (offsetX >MainActivity.deviceScreenWidth / 5) { if (fBitmap != null) { isFling = true; isFlingRight = true; } } else if (offsetX< -MainActivity.deviceScreenWidth / 5) { if (nBitmap != null) { isFling = true; isFlingLeft = true; } } // 开始动画效果 startAnimation(new MyAnimation()); }}
下面是MainActivity.java主界面文件:(没layout文件)
public class MainActivity extends Activity implements OnGestureListener { private FlingView flingView; private GestureDetector myGesture; public static int deviceScreenWidth; public static int deviceScreenHeight; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 获得手机的宽带和高度像素单位为px DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); deviceScreenWidth = dm.widthPixels; deviceScreenHeight = dm.heightPixels; Log.i(”mActivity“, ”deviceScreenWidth = “ + deviceScreenWidth + ”; deviceScreenHeight = “ + deviceScreenHeight); Bitmap[] bitmaps = { BitmapFactory.decodeResource(getResources(), R.drawable.img1), BitmapFactory.decodeResource(getResources(), R.drawable.img2), BitmapFactory.decodeResource(getResources(), R.drawable.img3), BitmapFactory.decodeResource(getResources(), R.drawable.img4), BitmapFactory.decodeResource(getResources(), R.drawable.img5) }; myGesture = new GestureDetector(this); flingView = new FlingView(this, bitmaps); setContentView(flingView); } //Activity中,通过onTouchEvent() 注册 myGesture.onTouchEvent(event) @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_UP: flingView.onFling(0); // 手指抬起后,重置滑动距离offsetX = 0 break; } return myGesture.onTouchEvent(event); } @Override public boolean onDown(MotionEvent e) { return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Log.i(”mActivity“, ”velocityX = “ + velocityX + ”; velocityY = “ + velocityY); flingView.onFling((int) - velocityX); return true; } @Override public void onLongPress(MotionEvent e) { } //获取滑动的x轴距离 @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { Log.i(”mActivity“, ”distanceX = “ + distanceX + ”; distanceY = " + distanceY); flingView.handleScroll(-1 * (int) distanceX); return true; } //获取手势的速度 @Override public void onShowPress(MotionEvent e) { } @Override public boolean onSingleTapUp(MotionEvent e) { return false; }}
Take your time and enjoy it
篇2:陶渊明集卷之四诗五言《拟古》
荣荣窗下兰,密密堂前柳(2)。
初与君别时,不谓行当久(3)。
出门万里客,中道逢嘉友(4)。
未言心相醉,不在接杯酒(5)。
兰枯柳亦衰,遂令此言负(6)。
多谢诸少年,相知不忠厚(7)。
意气倾人命,离隔复何有(8)?
〔注释〕
(1)这首诗采取拟人的手法,借对远行游子负约未归的怨恨,感慨世人结交不重信义,违背誓约,轻易初心。
(2)荣荣:繁盛的样子。这两句写当初分别之景,有起兴的作用。兰取其贞洁,柳取其惜别。
(3)君:指出门的游子。不谓行当久:没说此行要很久。
(4)中道:中途。嘉友:好友。
(5)心相醉:内心已为之倾倒,即一见倾心。这两句是说,尚未饮酒交谈,便一见倾心。
(6)言:指临别誓约。负:违背,背弃。
(7)多谢:多多告诫。《古诗为焦仲卿妻作》:“多谢后世人,戒之慎勿忘。”相知不忠厚:当面相知的朋友未必就是忠厚之人。此句及按下两句皆为告诫之辞。
(8)意气:情谊,恩义。倾人命:送性命。离隔:分离,离弃。这两句的意思是说,你为情谊可以不惜献出一切,可当那位不忠厚的朋友弃你而去之后,又有什么情谊存在呢?
〔译文〕
茂盛幽兰在窗下,依依垂柳在堂前。
当初与你告别时,未讲此行很久远。
出门万里客他乡,半道交朋结新欢。
一见倾心似迷醉,未曾饮酒尽言谈。
幽兰枯萎垂柳衰,背信之人违誓言。
告诫世间青少年,相知未必心不变。
你为情谊愿献身,他将你弃无情感。
篇3:陶渊明集卷之四诗五言《拟古》
辞家夙严驾,当往志无终(2)。
问君今何行?非商复非戎(3)。
闻有田子泰,节义为士雄(4)。
斯人久已死,乡里习其风(5)。
生有高世名,既没传无穷(6)。
不学狂驰子,直在百年中(7)。
〔注释〕
(1)这首诗托言远访高士田子泰的故乡,对高尚节义之士深表敬仰,对世间不顾节义而趋炎附势。争名逐利之人表示了厌恶。
(2)夙:早晨。严驾:整治车马,准备出行。曹植《杂诗》:“仆夫早匹驾,吾将远行游。”志无终:向往到无终去。按“志”一作“至”,亦通。无终:古县名,在今河北省蓟县。
(3)今何行:现在到那里去做什么。商:经商,做买卖。戎:从军。
(4)田子泰:即田畴,字子泰,东汉无终人。田畴以重节义而闻名。据《三国志。魏志。田畴传》载,当时董卓迁汉献帝于长安,幽州牧刘虞派田畴带二十多人到长安去朝见献帝。道路阻隔,行程艰难,但田畴等人还是到达长安朝见了献帝。献帝拜他为骑都尉,他说:“天子蒙尘,不可受荷佩。”辞不就,朝廷对他的节义很钦佩。当他返回时,刘虞已被公孙瓒杀害,但他仍到刘虞墓前悼念致哀,结果激怒公孙瓒,将他拘捕。后公孙瓒怕失民心,又将他释放。获释后,田畴隐居于徐无山中,归附他的百姓有五千多家,他就定法纪、办学校,使地方大治。节义:气节信义。士雄:人中豪杰。士,是古代对男子的`美称。
(5)斯人:此人,指田畴。习其风:谓继承了他重节义的遗风。
(6)生:生前,在世时。高世名:在世上声誉很高。既没:已死之后。
(7)狂驰子:指为争名逐利而疯狂奔走的人。直:只,仅。百年中:泛指人活一世的时间。
〔译文〕
辞家早起备车马,准备远行去无终。
请问前行欲何为?
不经商也不当兵。
听说有位田子泰,节义崇高称豪英。
虽然此人久已死,乡里承袭其遗风。
在世之时名誉高,死后美名传无穷。
不学奔走逐名利,荣耀只在一生中。
篇4:陶渊明集卷之四诗五言《拟古》
仲春遘时雨,始雷发东隅(2)。
众蛰各潜骇,草木从横舒(3)。
翩翩新来燕,双双入我庐(4)。
先巢故尚在,相将还旧居(5)。
自从分别来,门庭日荒芜。
我心固匪石,君情定何如(6)?
〔注释〕
(1)这首诗以春燕返巢托兴,表现诗人不因贫穷而改变隐居的素志,同时也寓有对晋室为刘宋所取代而产生的愤慨。
(2)仲春:阴历二月,遘(gòu构):遇,逢。东隅:东方。古人以东方为春。
(3)众蛰(zhé哲):各种冬眠的动物。蛰,动物冬眠。潜骇:在潜藏处被惊醒。从横舒:形容草木开始向高处和远处自由舒展地生长。从:同“纵”。以上四句描写季节变化。《礼记。月令》:“仲春二月,始雨水,雷乃发生,蛰曰咸动,启户始出。”
(4)翩翩:轻快飞翔的样子。庐:住室。
(5)先巢:故巢,旧窝。故:仍旧。相将:相随,相偕。旧居:指故巢。
(6)我心固匪石:本《诗经。邶风。柏舟》:“我心匪石,不可转也。”是说我的心并非石头,是不可转动的。比喻信念坚定,不可动摇。固:牢固,坚定不移。匪:非。君:指燕。
〔译文〕
二月喜逢春时雨,春雪阵阵发东边。
冬眠动物皆惊醒,草木润泽得舒展。
轻快飞翔春燕归,双双入我屋里边。
故巢依旧还存在,相伴相随把家还。
你我自从分别来,门庭日渐荒草蔓。
我心坚定不改变,君意未知将何如?
篇5:望蓬莱 述怀 云光集卷之四,望蓬莱 述怀 云光集卷之四王处一,望蓬莱 述
望蓬莱 述怀 云光集卷之四,望蓬莱 述怀 云光集卷之四王处一,望蓬莱 述怀 云光集卷之四的意思,望蓬莱 述怀 云光集卷之四赏析 -诗词大全
望蓬莱 述怀 云光集卷之四作者:王处一 朝代:元 体裁:词 天之道,妙用不虚传。一点生成法性,二仪炼就出尘仙。随步结金莲。明了了,颠倒显根源。四大扶持真水火,五光照彻九重天。七祖尽朝元
【进阶四之Android UI介面之(Gallery仿图像集浏览)】相关文章:
1.培训体会之四
5.《赠汪伦》 之四
8.浣溪沙五之四秦观






文档为doc格式