当前位置: 首页 > news >正文

2345浏览器网站进入物联网工程就业前景

2345浏览器网站进入,物联网工程就业前景,专业展馆展厅设计,技能培训机构排名前十Gallery2源码阅读图片编辑 以下是从Gallery2的入口类FilterShowActivity #xff08;图片编辑功能#xff09;顺序的阅读#xff0c;对看到的内容进行了一个简单的整理和记录。其中包括FilterShowActivity在创建时主要做的事情#xff0c;界面的变换#xff0c;历史记录的…Gallery2源码阅读图片编辑 以下是从Gallery2的入口类FilterShowActivity 图片编辑功能顺序的阅读对看到的内容进行了一个简单的整理和记录。其中包括FilterShowActivity在创建时主要做的事情界面的变换历史记录的管理以及ProcessingService的功能。目前看到Gallery2的图片编辑基于renderscript实现随后再做详细整理。 一FilterShowActivity分析 Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//是否只显示竖屏boolean onlyUsePortrait getResources().getBoolean(R.bool.only_use_portrait);if (onlyUsePortrait) {setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);}clearGalleryBitmapPool();doBindService();getWindow().setBackgroundDrawable(new ColorDrawable(Color.GRAY));setContentView(R.layout.filtershow_splashscreen);} 在OnCreate()方法里面会做下面几件事 - clearGalleryBitmapPool() 清理GalleryBitmapPool中缓存的图片 - doBindService() 绑定一个图片操作的数组 - setContentView(R.layout.filtershow_splashscreen) 进入图片编辑页面时有一个圆形进度条的闪屏页面 doBindService()主要是去bind ProcessingService用于在service里面处理一些图片的操作 //bindService后的一些操作public void updateUIAfterServiceStarted() {MasterImage.setMaster(mMasterImage);ImageFilter.setActivityForMemoryToasts(this);mUserPresetsManager new UserPresetsManager(this);mUserPresetsAdapter new UserPresetsAdapter(this);setupMasterImage(); //处理MasterImage对象setupMenu(); //处理一些菜单 setDefaultValues(); //设置默认参数fillEditors(); //填充EditorgetWindow().setBackgroundDrawable(new ColorDrawable(0));loadXML(); //出现设置视图fillCategories(); //设置编辑种类loadMainPanel(); //加载底部的面板extractXMPData(); processIntent(); //处理具体的Intent 区分是选择图片 还是加载图片} setupMasterImage()中主要做了一些MasterImage初始化的操作比如设置HistoryManager设置StateAdapter。 setupMenu()是初始化菜单比如undoItemredoItemresetItem printItem。 fillEditors()主要是添加一些Editor,比如EditorGradEditorRedEyeEditorCrop等等。 loadXML()将闪屏视图替换为新的编辑视图 fillLooks(); //填充滤镜loadUserPresets(); //填充用户自定义fillBorders(); //填充边框fillTools(); //填充工具fillEffects(); //填充效果fillVersions(); //填充版本 fillCategories()是填充底部面板的一些操作。 loadMainPanel()就是用MainFragment替换底部的面板。 二关于View的变换 整个图片显示都是基于自定义的ImageShow和一开始想象的不太一样以为图片编辑会用GLSurfaceView来显示用OpenGl ES来做渲染后来发现在编辑模块都是基于ImageShow而这个控件是继承View。图片的滤镜等效果处理也是采用RenderScript,将处理好的图片通过ImageCache缓存起来View只是负责单方面的显示。 ImageShow相关类的关系如下 对于不同的滤镜或者特效处理需要加载不同的Editor。 Editor protected View mView; //topViewprotected ImageShow mImageShow; //展示Image的View EditorCrop中 public EditorCrop() {super(ID);mChangesGeometry true;}Overridepublic void createEditor(Context context, FrameLayout frameLayout) {super.createEditor(context, frameLayout);if (mImageCrop null) {mImageCrop new ImageCrop(context);}mView mImageShow mImageCrop;mImageCrop.setEditor(this);} 在EditorCrop中mView和mImageShow会被替换成ImageCrop。 而在EditorPlaceHolder会根据Editor进行相关控件的隐藏和显示 /*** Editor 容器类*/ public class EditorPlaceHolder {private static final String LOGTAG EditorPlaceHolder;private FilterShowActivity mActivity null;private FrameLayout mContainer null;private HashMapInteger, Editor mEditors new HashMapInteger, Editor();private VectorImageShow mOldViews new VectorImageShow();public EditorPlaceHolder(FilterShowActivity activity) {mActivity activity;}public void setContainer(FrameLayout container) {mContainer container;}public void addEditor(Editor c) {mEditors.put(c.getID(), c);}public boolean contains(int type) {if (mEditors.get(type) ! null) {return true;}return false;}public Editor showEditor(int type) {Editor editor mEditors.get(type);if (editor null) {return null;}editor.createEditor(mActivity, mContainer);editor.getImageShow().attach();mContainer.setVisibility(View.VISIBLE);mContainer.removeAllViews();View eview editor.getTopLevelView();ViewParent parent eview.getParent();if (parent ! null parent instanceof FrameLayout) {((FrameLayout) parent).removeAllViews();}mContainer.addView(eview);hideOldViews();editor.setVisibility(View.VISIBLE);return editor;}public void setOldViews(VectorImageShow views) {mOldViews views;}public void hide() {mContainer.setVisibility(View.GONE);}public void hideOldViews() {for (View view : mOldViews) {view.setVisibility(View.GONE);}}public Editor getEditor(int editorId) {return mEditors.get(editorId);} }整个视图切换的流程就是需要不同的编辑效果只需要替换不同的Editor然后先移除ContainerView中的子view,隐藏oldViews显示当前的editor即可。 三HistoryManager 图片编辑中有一个撤销和恢复的操作 private VectorHistoryItem mHistoryItems new VectorHistoryItem(); //逆序排列 原理就是维护一个HistoryItem的Vector,不过这里记录是逆序排列的也就是最近的记录是在最前面。 private void insert(HistoryItem preset, int position) {if (mCurrentPresetPosition ! 0) {// in this case, lets discount the presets before the current one//这里进行判断因为每次mCurrentPresetPosition之前的记录是无效的所以需要舍弃掉。 有可能进行撤销操作了之前的记录就不再需要了VectorHistoryItem oldItems new VectorHistoryItem();for (int i mCurrentPresetPosition; i getCount(); i) {oldItems.add(getItem(i));}clear();for (int i 0; i oldItems.size(); i) {add(oldItems.elementAt(i));}mCurrentPresetPosition position;notifyDataSetChanged();}mHistoryItems.insertElementAt(preset, position);mCurrentPresetPosition position;notifyDataSetChanged();} 具体的撤销操作就是mCurrentPresetPosition指针加1恢复就是减1。 public int redo() {mCurrentPresetPosition--;if (mCurrentPresetPosition 0) {mCurrentPresetPosition 0;}notifyDataSetChanged();updateMenuItems();return mCurrentPresetPosition;}public int undo() {mCurrentPresetPosition;if (mCurrentPresetPosition getCount()) {mCurrentPresetPosition getCount() - 1;}notifyDataSetChanged();updateMenuItems();return mCurrentPresetPosition;} 但是需要注意边界条件的控制。 具体的一个HistoryItem主要包含三个对象 private ImagePreset mImagePreset;private FilterRepresentation mFilterRepresentation;private Bitmap mPreviewImage; mImagePreset包含了一系列FilterRepresentation的叠加维护了一个mFilterRepresentation的数组也就是所有用过的效果参数保存起来mFilterRepresentation就是当前效果的一些参数的保存。mPreviewImage好像没有用到。也就是说HistoryItem不保存具体的Bitamp对象后面可以看到处理后的Bitmap缓存在BitmapCache里面。 四ProcessingService 有这么几个重要的类 private ProcessingTaskController mProcessingTaskController; //装载任务的容器private ImageSavingTask mImageSavingTask; //保存图片 任务private UpdatePreviewTask mUpdatePreviewTask; //更新 预览图任务private HighresRenderingRequestTask mHighresRenderingRequestTask; //目前还没看到private FullresRenderingRequestTask mFullresRenderingRequestTask; //目前还没看到private RenderingRequestTask mRenderingRequestTask; //渲染任务 先简单标记一下后面再细看。
http://www.hkea.cn/news/14327879/

相关文章:

  • 阳谷网站建设价格百度网盘登录入口网页版
  • 百度怎样收录到网站移动互联网应用开发
  • 北京多语言网站建设wordpress远程图片本地化
  • 怎样投网站广告跨境电商是怎么赚钱的
  • 专门设计的网站徐州飞虹网架公司
  • 转化率的网站设计如何制作一款小程序
  • 引流网站建设教程修改wordpress入口地址
  • 您与此网站之间建立的连接不安全广告设计培训班有用吗
  • 珠海网站建设杰作科技网站流量是什么
  • 网站的关键词排名wordpress写文章教程
  • 万网域名注册后怎么样做网站移动公司需要网络工程专业
  • 里水网站建设西安今天消息
  • 网站建设目的意义专业网站推荐
  • 北京网站制作平台网站建设费 会计分录
  • 网站开发维护承担的法律责任国外设计作品
  • 网站推广软件ky99网站建设 教学视频教程
  • 制作网站的模板wordpress搬家 500
  • 视频网站建设技术方案书哪家装修公司口碑好?
  • 又一个wordpress网站关于企业网站建设的建议
  • 龙湖地产 网站建设网站建设框架构建
  • wordpress 转换成帝国新网网站内部优化
  • 中学生制作网站建设银行网站怎么取消短信服务
  • 网站建设价格需要多少钱一份完整的市场调查方案
  • 制作网站的网页如何申请免费的网站空间
  • 长春网站建设专业公司网络营销模式的优缺点分析
  • 网站怎样被百度收录深圳专门做seo的公司
  • 网站开发大揭秘wordpress实时交流插件
  • 自己公司内网网站和外网怎么做同步南京建网站公司
  • ui设计做兼职的网站有哪些中小企业有哪些公司
  • 360免费建站方法简约大气网站模板