- 浏览: 5779311 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
不仅实现了Lollipop中打开新的activity 的zoom效果(根据点击位置逐步展开过渡到新的界面),还实现了一个弹簧效果的ViewPager
public class MainActivity extends FragmentActivity { private Context context; private GridView gridView; private ArrayList<Integer> imgList = new ArrayList<>(); private ArrayList<ImageInfo> imgImageInfos = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context=this; imgList.add(0, R.drawable.p1); imgList.add(1, R.drawable.p2); imgList.add(2, R.drawable.p3); imgList.add(3, R.drawable.p4); imgList.add(4, R.drawable.p1); imgList.add(5, R.drawable.p2); imgList.add(6, R.drawable.p3); imgList.add(7, R.drawable.p4); imgList.add(8, R.drawable.p1); gridView = (GridView) findViewById(R.id.gridview); final ImageAdapter adapter = new ImageAdapter(); gridView.setAdapter(adapter); gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Bundle bundle = new Bundle(); bundle.putIntegerArrayList("imgs", imgList); bundle.putParcelable("info", ((PhotoView) view).getInfo()); bundle.putInt("position", position); imgImageInfos.clear(); //NOTE:if imgList.size >= the visible count in single screen,i will cause NullPointException //because item out of screen have been replaced/reused for(int i = 0; i < imgList.size(); i++){ imgImageInfos.add(((PhotoView)parent.getChildAt(i)).getInfo()); } parent.getChildAt(position); bundle.putParcelableArrayList("infos", imgImageInfos); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_viewpager, ViewPagerFragment.getInstance(bundle), "ViewPagerFragment") .addToBackStack(null).commit(); } }); } class ImageAdapter extends BaseAdapter { @Override public int getCount() { return imgList.size(); } @Override public Object getItem(int i) { return imgList.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { int size=(int) (getResources().getDisplayMetrics().density * 100); PhotoView p = new PhotoView(MainActivity.this); p.setLayoutParams(new AbsListView.LayoutParams(size, size)); p.setScaleType(ImageView.ScaleType.CENTER_CROP); p.setImageResource(imgList.get(i)); p.touchEnable(false);//disable touch return p; } } }
import java.util.ArrayList; import com.example.testimage.widget.ImageInfo; import com.example.testimage.widget.PhotoView; import com.example.testimage.widget.ReboundViewPager; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.AccelerateInterpolator; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.widget.TextView; public class ViewPagerFragment extends Fragment{ private ReboundViewPager viewPager; private TextView tips; //viewpager indicator private ArrayList<Integer> imgs; private ImageInfo imageInfo; private View mask;//background view private ArrayList<ImageInfo> imageInfos; private int position; public static ViewPagerFragment getInstance(Bundle imgs){ ViewPagerFragment fragment = new ViewPagerFragment(); fragment.setArguments(imgs); return fragment; } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_viewpager,null); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); viewPager = (ReboundViewPager) view.findViewById(R.id.viewpager); tips = (TextView) view.findViewById(R.id.text); mask = view.findViewById(R.id.mask); runEnterAnimation(); Bundle bundle = getArguments(); imgs = bundle.getIntegerArrayList("imgs"); imageInfo = bundle.getParcelable("info"); imageInfos = bundle.getParcelableArrayList("infos"); position = bundle.getInt("position", 0); tips.setText((position + 1) + "/" + imgs.size()); viewPager.getOverscrollView().setAdapter(new PagerAdapter() { @Override public int getCount() { return imgs.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int pos) { PhotoView view = new PhotoView(getActivity()); view.touchEnable(true); view.setImageResource(imgs.get(pos)); if(position == pos){//only animate when position equals u click in pre layout view.animateFrom(imageInfo); } //force to get focal point,to listen key listener view.setFocusableInTouchMode(true); view.requestFocus(); view.setOnKeyListener(pressKeyListener);//add key listener to listen back press view.setOnClickListener(onClickListener); view.setTag(pos); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }); viewPager.getOverscrollView().addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { tips.setText((position + 1) + "/" + imgs.size()); } @Override public void onPageScrollStateChanged(int state) { } }); //set current position viewPager.getOverscrollView().setCurrentItem(position); } private View.OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View v) { exitFragment(v); } }; private void exitFragment(View v) { //退出时点击的位置 int position = (int) v.getTag(); //回到上个界面该view的位置 runExitAnimation(v); ((PhotoView)v).animateTo(imageInfos.get(position), new Runnable() { @Override public void run() { if (!ViewPagerFragment.this.isResumed()) {//fragment被回收 return; } final FragmentManager fragmentManager = getFragmentManager(); if (fragmentManager != null) { fragmentManager.popBackStack();//回退栈 } } }); } private View.OnKeyListener pressKeyListener = new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) {//只监听返回键 if (event.getAction() != KeyEvent.ACTION_UP) { return true; } exitFragment(v); return true; } return false; } }; private void runEnterAnimation() { AlphaAnimation alphaAnimation = new AlphaAnimation(0,1); alphaAnimation.setDuration(300); alphaAnimation.setInterpolator(new AccelerateInterpolator()); mask.startAnimation(alphaAnimation); } public void runExitAnimation(final View view) { AlphaAnimation alphaAnimation = new AlphaAnimation(1,0); alphaAnimation.setDuration(300); alphaAnimation.setInterpolator(new AccelerateInterpolator()); alphaAnimation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { mask.setVisibility(View.GONE); view.setVisibility(View.GONE); } @Override public void onAnimationRepeat(Animation animation) { } }); mask.startAnimation(alphaAnimation); } }
发表评论
-
ViewPager引导页根据滑动渐变背景色
2017-03-31 09:38 28161、主要依赖: compile'com.android.su ... -
Android 新推出基于物理的动画库SpringAnimation,完全诠释什么叫做弹簧效果
2017-03-30 10:38 2572Android 最近推出一个新的基于物理学的动画支持库,命名为 ... -
一个比较强大的提供各种形状的ImageView
2016-12-26 09:54 2934github上比较老的项目了,但是还是比较好用的。 各种形状总 ... -
PhotoView点击放大图片效果
2016-12-21 10:13 6051使用的PhotoView是这个版本的,比较小巧,很好用,比gi ... -
仿微信页面切换图标颜色渐变效果
2015-11-23 14:54 4420主要是提供一种思路,一般来书,类似效果无非就是在Canvas, ... -
把任意Drawable转换成基于progress填充的drawable
2015-11-11 16:29 2749把任意Drawable转换成基于progress填充的draw ... -
一个用来设置警示View 的呼吸式背景颜色的工具类BreathingViewHelper
2015-10-10 14:03 3037一个简单的小工具类,用来设置警示 View 的呼吸式背景颜色 ... -
单手操作图片控件 镜像、置顶、缩放、移动:StickerView
2015-10-08 11:21 3167单手操作图片控件 镜像、置顶、缩放、移动 impo ... -
Android App状态栏变色:ColorfulStatusBar
2015-09-24 12:38 9910适用于版本大于等于19以上。 import android ... -
PathView实现炫酷SVG动画
2015-08-25 09:23 4403解析SVG,需要将一个androidsvg.jar包含进lib ... -
LinearLayout增加divider分割线
2015-08-13 14:58 11054在android3.0及后面的版本在LinearLayout里 ... -
Android换肤白天/夜间模式的框架
2015-07-29 15:36 2934Android换肤/夜间模式的Android框架,配合them ... -
使用ActivityOptions做Activity切换动画
2015-04-10 11:02 6576不知道大家有没有注意到startActivity(Intent ... -
一个不错的ArcMenu
2015-01-23 10:34 3906ArcMenu这种效果现在很多人都实现了 而且代码质量也 ... -
使用ScheduledExecutorService延时关闭一个全屏的对话框
2014-12-29 16:38 4371自定义style,设置全屏属性 <resources ... -
让View只显示下边框
2014-10-23 17:13 3965下面的代码是实现一个带边框的xml,很常见 <?xm ... -
让一张图片从模糊慢慢变清晰动画过程
2014-01-27 16:38 9251import java.io.IOExcepti ... -
ListView,GridView之LayoutAnimation特殊动画的实现
2013-05-24 11:23 34368LayoutAnimation干嘛用的?不知道的话网上搜一下。 ... -
食神摇摇中图片的晃动效果
2013-04-27 11:45 5453可以是这样子实现滴: btn_shake=(Image ... -
圆形菜单效果
2013-02-20 14:25 2656需要android3.0
相关推荐
非常小的一个简单demo,供入门者参考用,主要就是针对scrollView自带的zoom缩放功能结合分页浏览做的图片浏览效果。
58. jquery黑色风格左右带箭头的图片浏览控制插件下载 59. jQuery鼠标滑动图片显示标题与简介的滑动动感特效代码 60. jQuery鼠标移上小图显示大缩略图功能 61. js仿淘宝网鼠标经过缩略图放大图片效果的jQuery ...
58. jquery黑色风格左右带箭头的图片浏览控制插件下载 59. jQuery鼠标滑动图片显示标题与简介的滑动动感特效代码 60. jQuery鼠标移上小图显示大缩略图功能 61. js仿淘宝网鼠标经过缩略图放大图片效果的jQuery ...
58. jquery黑色风格左右带箭头的图片浏览控制插件下载 59. jQuery鼠标滑动图片显示标题与简介的滑动动感特效代码 60. jQuery鼠标移上小图显示大缩略图功能 61. js仿淘宝网鼠标经过缩略图放大图片效果的jQuery ...
58. jquery黑色风格左右带箭头的图片浏览控制插件下载 59. jQuery鼠标滑动图片显示标题与简介的滑动动感特效代码 60. jQuery鼠标移上小图显示大缩略图功能 61. js仿淘宝网鼠标经过缩略图放大图片效果的jQuery ...
58.jquery黑色风格左右带箭头的图片浏览控制插件下载 59.jQuery鼠标滑动图片显示标题与简介的滑动动感特效代码 60.jQuery鼠标移上小图显示大缩略图功能 61.js仿淘宝网鼠标经过缩略图放大图片效果的jQuery ...
Zoom for ASP.NET 试用版 试用版 开发语言: .NET 可用平台: Visual Studio 2005-...只需要一行代码即可让应用程序中的图像交互浏览实现类似Google Maps和Windows Live Local的效果。只需拖、拽即可运行您的应用程序。
支持全屏浏览模式的功能源码,源码XHImageViewer,实现图片浏览功能,点击图片,开启图片全屏浏览模式,支持下载和显示网络图片,该效果也比较简单的,希望能够帮到大家的学习。XHImageViewer is images viewer, ...
*zoom:1,页面中加入了图片延时载入的效果lazyload,个人测试lazyload仅仅是改善了显示的效果而已,并没有实现按需请求的。新安装的主题默认是没有“keywords”和“description”,虽然可以实现采用TAG和截取文章的...
#jQuery 插件! ###访问: ... 这些插件是为了实现面向对象编程的... Side-Scroll :给定图片列表,Side-Scroll 获取这些图片并允许用户循环浏览每张图片。 Zoom :在给定的图片上实现放大镜,让用户看到更精细的细节。
3.3.2 浏览效果 149 3.3.3 修改特技 150 3.3.4 使用关键帧自定效果 152 第4章 抠像、透明与迭加画面应用 4.1 认识抠像与迭加 155 4.2 常用抠像、透明迭加方式 156 4.2.1 抠像技巧与色键透明 156 4.2.2 Luminance透明...
OpenLayers是一个开源的js框架,用于在您的浏览器中实现地图浏览的效果和基本的zoom,pan等功能。OpenLayers支持的地图来源包括了WMS,GoogleMap,KaMap,MSVirtualEarth等等,您也可以用简单的图片作为源,在这一...
OpenLayers是一个开源的js框架,用于在您的浏览器中实现地图浏览的效果和基本的zoom,pan等功能。OpenLayers支持的地图来源包括了WMS,GoogleMap,KaMap,MSVirtualEarth等等,您也可以用简单的图片作为源,在这一...
在上一篇文章中我带着大家一起实现了Android瀑布流照片墙的效果,虽然这种效果很炫很酷,但其实还只能算是一个半成品,因为照片墙中所有的图片都是只能看不能点的。因此本篇文章中,我们就来对这一功能进行完善,...
OpenLayers是一个开源的js框架,用于在您的浏览器中实现地图浏览的效果和基本的zoom,pan等功能。OpenLayers支持的地图来源包括了WMS,GoogleMap,KaMap,MSVirtualEarth等等,您也可以用简单的图片作为源,在这一...
具有图像效果,画廊,图像信息等。 该应用程序可以自动根据您的屏幕进行调整。 可定制的主题 可以在设置菜单F4找到深色主题和浅色主题之间的选择,以及12种强调色。 配置用户界面 通过按Alt + Z可以将界面切换为...
在上一篇文章中我带着大家一起实现了Android瀑布流照片墙的效果,虽然这种效果很炫很酷,但其实还只能算是一个半成品,因为照片墙中所有的图片都是只能看不能点的。因此本篇文章中,我们就来对这一功能进行完善,...
提供查看缩略视图到原视图的无缝过渡转变的视觉效果,优雅的浏览普通图,长图,动图。 主要功能 过渡动画到到大图或大图到更高时提供无缝衔接动画 浏览手势浏览大图时可使用常势操作。如缩放图片等。( ) 超大图...
本主题是蓝色类别的两栏博客类主题,主题比较简单、明了,页面宽度是960px,其中左栏700px,右栏250px,用标准的浏览器如火狐等可以获得最佳的浏览效果,当然在IE6还没完全消失的目前,还是作了最大限度的兼容,但...