`
everlxq
  • 浏览: 108608 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

2013.11.18

 
阅读更多
时间:2个星期之久
工作进度缓慢,android起步。。。


  本次项目为交行app,新闻内容页面采用url方式引用,牵涉到一系列关于webview的问题,其实一直在

copy,整合别人的经验而已。

  首先,采用url方式的可行性。一开始考虑到的是页面缓存问题,采用html(url)方式,缓存之后,新

闻内容页的图片路径问题。网页上,图片地址或相对或绝对,在缓存本地之后,路径问题如何解决。以前

没有这类问题,从这个问题上我发现我解决问题的思路不对,首先面对url方式,我不是考虑到可行性的问

题上,而是直接上手,在全局的考虑上没有大局观念。面对一个需求重要的是轮廓,继而添枝加叶。
  对于这个考虑,我是按照我错误的思路实践下逼出来的方法,webview与javascript的交互的知识点下手

,给webview添加js监听事件,返回html字符串,替换img的路径,然后根据自己的路径保存图片,解决问

题。
  启用javascript
  contentWebView.getSettings().setJavaScriptEnabled(true);
  设置js监听事件
  contentWebView.addJavascriptInterface(new InJavaScriptLocalObj(), "local_obj");
  重写MyWebViewClient方法
@Override  
        public void onPageFinished(WebView view, String url) {  
  
            view.getSettings().setJavaScriptEnabled(true);  
  
            super.onPageFinished(view, url);  
            // html加载完成之后,添加监听图片的点击js函数  
            addImageClickListner(); 
            
            view.loadUrl("javascript:(function(){" +  
                    "var objs = document.getElementsByTagName(\"img\"); " +   
                            "var arr=new Array(); " +
                            "if(objs.length>0){" +
                            "for(var i=0;i<objs.length;i++)  " +   
                    "    {" +
                    " arr[i]=objs[i].src;" 
            +        "    }  " +   
                    "var str=arr.join(\",\");" +
                    "function Image(){window.cache_image.cacheimage(str);}" +
                    " Image();}" +
                    "})()");
            
            view.loadUrl("javascript:window.local_obj.showSource('<head>'+" +
                    "document.getElementsByTagName('html')[0].innerHTML+'</head>');");
            
        }  
  
        @Override  
        public void onPageStarted(WebView view, String url, Bitmap favicon) {  
            view.getSettings().setJavaScriptEnabled(true);  
  
            super.onPageStarted(view, url, favicon); 
        }  
  
        @Override  
        public void onReceivedError(WebView view, int errorCode, String description, String 

failingUrl) {  
  
            super.onReceivedError(view, errorCode, description, failingUrl);  
  
        }  
    }
  
通过imageview.addUrl()方法添加方法格式如上
js:
contentWebView.loadUrl("javascript:(function(){" +  
        "var objs = document.getElementsByTagName(\"img\"); " +   
                "for(var i=0;i<objs.length;i++)  " +   
        "{"  
                + "    objs[i].onclick=function()  " +   
        "    {  "   
                + "        window.imagelistner.openImage(this.src);  " +   
        "    }  " +   
        "}" +   
        "})()");  
js可以在html上实验后再拿过来。


  图片的缩放、旋转

  思路:
  把图片传到一个新的activity中,此activity背景半透明。实现OnTouchListener接口
  imgview.setOnTouchListener(this);
  imgview.setLongClickable(true);

  View 里面有个setLongClickable(boolean longClickable)的方法,意思是说是否要启用长按功能。
true 是让设备支持长按,false是不支持。设为true的时候MotionEvent.ACTION_UP就能监听到了!

  重写onTouch方法
  此方法有2个参数View v, MotionEvent event
  v是操作对象,event是动作事件
  switch (event.getActionMasked()) {//判断动作
  case MotionEvent.ACTION_DOWN:// 一个点按下去了
			matrix.set(imgview.getImageMatrix());
			savedMatrix.set(matrix);
			start.set(event.getX(), event.getY());//此时接触的点记录为(PointF)

start开始点		                        Log.d("Infor", "触摸了...");
			mode = DRAG;
			break;
		case MotionEvent.ACTION_POINTER_DOWN: // 多点触控  
			oldDist = this.spacing(event);//计算2点间的距离,若距离大于10f,则判

定为多点
			if (oldDist > 10f) {
				Log.d("Infor", "oldDist" + oldDist);
				savedMatrix.set(matrix);
				midPoint(mid, event);//计算两点间的距离的中点
				old.set(event.getX(1), event.getY(1));//此时两点间第二个点记

录为old点,用于图片旋转
				mode = ZOOM;
			}
			break;
		case MotionEvent.ACTION_POINTER_UP://第二个点拿起
			mode = NONE;
			break;
		case MotionEvent.ACTION_MOVE:
			
			if (mode == DRAG) { // 此实现图片的拖动功能...
				matrix.set(savedMatrix);
				matrix.postTranslate(event.getX() - start.x, event.getY()
						- start.y);//postTranslate拖动方法
			} else if (mode == ZOOM) {// 此实现图片的缩放功能...
				now.set(event.getX(1), event.getY(1));缩放过程中第二个点旋转

,这个店一直变化,记录为now点用于旋转
				float newDist = spacing(event);//计算两点间距离
				if (newDist > 10) {
					float angle=degree(mid,event);
					matrix.set(savedMatrix);
					float scale = newDist / oldDist;
					matrix.postScale(scale, scale, mid.x, mid.y);
					matrix.postRotate(angle, mid.x, mid.y);
				}
			}
			break;
		}
  imgview.setImageMatrix(matrix);


  再者是最终要的缓冲问题,
  思路:保存所有数据到本地文件夹,从中读取。——————————》内存缓冲去了解!!!!
  页面html再修改img路径后写入本地创建好的文件中,以图片名字为名,创建的html文件。
  页面图片的点击事件的获取
  private void addImageClickListner() {  
        // 这段js函数的功能就是,遍历所有的img几点,并添加onclick函数,函数的功能是在图片点击

的时候调用本地java接口并传递url过去  
        contentWebView.loadUrl("javascript:(function(){" +  
        "var objs = document.getElementsByTagName(\"img\"); " +   
                "for(var i=0;i<objs.length;i++)  " +   
        "{"  
                + "    objs[i].onclick=function()  " +   
        "    {  "   
                + "        window.imagelistner.openImage(this.src);  " +   
        "    }  " +   
        "}" +   
        "})()");  
    }  

MyWebViewClient中
addImageClickListner(); 


contentWebView.addJavascriptInterface(new JavascriptInterface(this), "imagelistner"); 

  
第一次加载url时缓存所有的图片
同样是添加js时间
重点是js语句的学习


android 文件写入

 File myCaptureFile = new File(ALBUM_PATH+nid+".html"); 
            try {
				BufferedOutputStream bos = new BufferedOutputStream(new 

FileOutputStream(myCaptureFile));  
        //将要写入的字符串转换为byte数组
        byte[] bytes = s1.getBytes();
        bos.write(bytes);//将byte数组写入文件
        bos.close();//关闭文件输出流
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}


new Handler().postDelayed(new Runnable() {

			public void run() {
				Intent intent = new Intent();
				intent.setClass(MainActivity.this, MainLoginActivity.class);
				startActivity(intent);
				MainActivity.this.finish();
			}
		}, 3000);
分享到:
评论

相关推荐

    live.2013.10.18windows

    live 版本2013.10.18 windows vs2010 编译的整个工程文件,含编译脚本,参考http://www.cnblogs.com/skyseraph/archive/2012/04/11/2442840.html

    计算机网络试题(A)A4-2013.11.pdf

    8. 18.160.0.0 9. 内部和外部 10. 差错报告,询问 11. 链路状态 【名词解释】 1. UTP - Unshielded Twisted Pair,非屏蔽双绞线 2. SONET - Synchronous Optical Networking,同步光网络 3. CIDR - Classless Inter...

    [Mastering.Node.js(2013.11) 精通Node.js

    Harmony 18 The process object 19 The Read-Eval-Print Loop and executing a Node program 21 Summary 23 Chapter 2: Understanding Asynchronous Event-Driven Programming 25 Broadcasting events 26 ...

    Erphpdown插件 WordPress收费下载/收费查看隐藏内容/在线充值/前端个人中心/用户推广提现

    基本功能: 已经在程序中集成支付宝(担保交易/双功能接口/即时到帐)、银联、paypal、财付通、微信支付(扫码支付)、个人免签约支付...支持支付宝即时到帐与双功能接口,银联支付,paypal贝宝支付(v1.0 2013.11.10)

    css参考手册V4.1.0.chm

    web前端开发参考手册系列之 CSS参考手册 版本:v4.1.0 最后更新时间:2013.11.18 编著:飘零雾雨

    嵌入式系统课程设计2013.5.pdf

    上述文件"嵌入式系统课程设计2013.5.pdf"列举了一系列基于单片机的项目设计,这些设计展示了嵌入式系统在不同领域的应用和技术实践。 1. **汽车模型设计**:全自动驾驶汽车模型的设计制作涉及到车辆控制算法、...

    简单带宽叠加

    在压缩包中,“简单带宽叠加v2013.11.18.bat”可能是该软件的执行文件,用户运行这个批处理文件来启动服务。批处理文件是Windows操作系统中的一种脚本文件,通常包含一系列命令,用于自动化特定任务。 另一个文件...

    solaris10.zip

    gcc4core-4.8.0,REV=2013.03.29-SunOS5.10-i386-CSW.pkg.gz libmpfr4-3.1.2,REV=2014.03.18-SunOS5.10-i386-CSW.pkg.gz gcc4g++-4.8.0,REV=2013.03.29-SunOS5.10-i386-CSW.pkg.gz libncurses5-5.9,REV=2011.11.21-...

    ARM教材勘误2013.doc

    18. **习题5.17**:对地址序列的表述进行了修正。 19. **图6-7**:更新了相关图形。 20. **波特率单位**:在通信速率的单位上,将“波特/秒”更正为“波特”。 21. **图6-47和例6.4**:修正了异步串行通信中数据...

    openstack安装包(二)

    boost-program-options-1.41.0-18.el6.x86_64.rpm btrfs-progs-0.20-0.2.git91d9eec.el6.x86_64.rpm celt051-0.5.1.3-0.el6.x86_64.rpm crudini-0.3-2.el6.noarch.rpm cvs-1.11.23-16.el6.x86_64.rpm cyrus-sasl-...

    3.C++.Programming.Language.4th.Edition.2013

    18. Overloading ................................................................................. 527 19. Special Operators ........................................................................ 549...

    完美版资料嵌入式系统课程设计2013.5.doc

    18. **谐波鉴幅**:利用人工神经网络分析电力系统的谐波成分。 19. **鱼用投饵机**:自动控制饲料投放,提高水产养殖效率。 20. **调压调速系统仿真**:在MATLAB环境中对控制系统进行建模和仿真。 21. **无刷直流...

    IEEE802.11协议规范合集

    18. **802.11y**:扩展了802.11a的工作频段,包括36-48GHz的频段。 19. **802.11z**:可能包含对现有标准的补充或更新,具体细节可能在文档中详细阐述。 这些协议的不断发展和完善,不仅提升了Wi-Fi的速度,还增强...

    openstack安装包(一)

    boost-program-options-1.41.0-18.el6.x86_64.rpm btrfs-progs-0.20-0.2.git91d9eec.el6.x86_64.rpm celt051-0.5.1.3-0.el6.x86_64.rpm crudini-0.3-2.el6.noarch.rpm cvs-1.11.23-16.el6.x86_64.rpm cyrus-sasl-...

    初二生物月考试题2013.docx

    18. 节肢动物与疾病传播:某些节肢动物如蚊子和蜱能传播疾病。 19. 鱼离开水死亡的原因:鱼类通过鳃进行呼吸,离开水后鳃会干燥导致无法呼吸。 20. 两栖动物的识别:青蛙是典型的两栖动物,而蜥蜴是爬行动物。 21...

    计算机基础知识试题及答案2013.pdf

    18. 磁盘属于外存储器,包括硬盘和软盘等。 19. 3.5英寸软盘上的小方孔滑块用于写保护,防止数据被意外修改。 20. CD-ROM是只读光盘,常用于存储大量数据,如软件、音乐等。 21. 气象预报属于数值计算应用领域,涉及...

    西门子2014年最新授权工具原版 Simatic_EKB_Install_2013_12_25.zip

    v2013.12.10 add some info for Simocode v12 // MD5: 10a0c74548ba89b80e98f2664289ba79 v2013.12.02 add some info for PDM v8.1 v2013.12.01 add some info for Softnet Security Client v4.0 v2013.05.26 add ...

    2013.3计算机二级c语言真题及答案.pdf

    18. switch语句:与if语句功能等价的switch语句是D),因为if语句中的条件是a==1,而switch语句中case 1对应这个条件。 19. 嵌套if语句:与嵌套if语句等价的语句是A),使用了三元运算符来实现相同的逻辑。 以上是...

Global site tag (gtag.js) - Google Analytics