/**============================================================ * 版权: 久其软件 版权所有 (c) * 包: com.jiuqi.njt.ui * 修改记录: * 日期 作者 内容 * ============================================================= * 2013-10-06 malingya * ============================================================*/ package com.jiuqi.njt.ui; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; import android.view.GestureDetector; import android.view.GestureDetector.OnGestureListener; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.webkit.CookieManager; import android.webkit.DownloadListener; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.FrameLayout; import android.widget.ImageView; import com.jiuqi.mobile.nigo.comeclose.bean.app.news.NoticeNewsBean; import com.jiuqi.mobile.nigo.comeclose.manager.app.INewsManager; import com.jiuqi.mobile.nigo.comeclose.ws.client.ClientContext; import com.jiuqi.njt.R; import com.jiuqi.njt.data.MyApp; import com.jiuqi.njt.util.Constants; import com.jiuqi.njt.util.TextToSpeechUtil; import com.jiuqi.njt.util.TitleBarUtil; import com.jiuqi.njt.util.UIUtil; import com.jiuqi.njt.widget.WaitPageWebView; /** * <p> * 农信网功能模块 * </p> * * <p> * Copyright: 版权所有 (c)<br> * Company: 久其 * </p> * * @author malingya * @version 2013-10-06 */ public class NxwPushInfoDetailActivity extends Activity implements OnTouchListener, OnGestureListener { private FrameLayout webviewLayout; private WebView webview; private String url; private GestureDetector gestureDetector; private ImageView speechButton; private String id; private int position = 0; private ArrayList<NoticeNewsBean> newslist; private MyApp application; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); doinit(); } private void doinit() { initParam(); initWidgets(); initListeners(); initUI(); } private void initParam() { url = getIntent().getStringExtra(Constants.PARAM_URL); id = getIntent().getStringExtra(Constants.PARAM_ID); application = (MyApp) getApplicationContext(); doQuery(); } private void initWidgets() { String title = TextUtils.isEmpty(getIntent().getStringExtra( Constants.PARAM_TITLE)) ? "" : getIntent().getStringExtra( Constants.PARAM_TITLE); String btnLeftTitle = TextUtils.isEmpty(getIntent().getStringExtra( Constants.PARAM_BTNLEFT_TITLE)) ? Constants.MAINPAGE_TITLE_TEXT : getIntent().getStringExtra(Constants.PARAM_BTNLEFT_TITLE); setContentView(R.layout.nxw_moduler_detail); View rlTitleBar = findViewById(R.id.titleBarStub); TitleBarUtil.createTitleBar(this, rlTitleBar, title, Constants.BTN_BACK_TEXT, new OnClickListener() { @Override public void onClick(View v) { NxwPushInfoDetailActivity.this.finish(); } }, btnLeftTitle, new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(NxwPushInfoDetailActivity.this,NjtMainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); NxwPushInfoDetailActivity.this.finish(); } }); speechButton = (ImageView) findViewById(R.id.speechButton); webviewLayout = (FrameLayout) findViewById(R.id.webview); webview = new WaitPageWebView(NxwPushInfoDetailActivity.this, null); gestureDetector = new GestureDetector(NxwPushInfoDetailActivity.this); } // ---------begin触摸屏监听和手势监听的方法------------------------------------------------------- public boolean onTouch(View v, MotionEvent event) { gestureDetector.onTouchEvent(event);// 将触摸屏事件传入手势事件 //请求焦点 webview.requestFocus(); return false; } public boolean onDown(MotionEvent e) { return true; } public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { float scale = getResources().getDisplayMetrics().density; int FLINGTHRESHOLD = (int) (20.0f * scale + 0.5f); float vx = Math.abs(velocityX);// 取其绝对值 float vy = Math.abs(velocityY); //----begin设置浮动框的弹出和收回-------------------- //列表页支持上下滑动翻页,内容页支持左右滑动 if(vx - vy >FLINGTHRESHOLD){ if(newslist!=null && newslist.size()>1){ if(velocityX>0){//前一页 toForward(); }else if(velocityX<0){//后一页 toNext(); } }else{ //没有更多内容,返回到列表 NxwPushInfoDetailActivity.this.finish(); } } return false; } private void initListeners() { // 点击后退按钮,让WebView后退一页(也可以覆写Activity的onKeyDown方法) webview.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { NxwPushInfoDetailActivity.this.finish(); // 清除缓存 webview.removeAllViews(); webview.clearCache(true); CookieManager.getInstance().removeAllCookie(); } return false; } }); webview.setOnClickListener(null); //webview.setOnTouchListener(this); DisplayMetrics dm = getResources().getDisplayMetrics(); final int screenWidth = dm.widthPixels; final int screenHeight = dm.heightPixels - 50; speechButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(newslist!=null){ NoticeNewsBean bean = newslist.get(position); StringBuffer contentString = new StringBuffer(); contentString.append(bean.getTitle()); contentString.append("来源"); contentString.append(bean.getAddPersonOrganizationName()); contentString.append(bean.getCreateDateStr()); contentString.append(bean.getContent()); TextToSpeechUtil ttsUtil = new TextToSpeechUtil(NxwPushInfoDetailActivity.this); ttsUtil.textToSpeechDialog(UIUtil.delHTMLTag(contentString.toString()));; } } }); speechButton.setOnTouchListener(new OnTouchListener(){ int lastX, lastY; @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub int ea=event.getAction(); Log.i("TAG", "Touch:"+ea); //Toast.makeText(DraftTest.this, "位置:"+x+","+y, Toast.LENGTH_SHORT).show(); switch(ea){ case MotionEvent.ACTION_DOWN: lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; /** * layout(l,t,r,b) * l Left position, relative to parent t Top position, relative to parent r Right position, relative to parent b Bottom position, relative to parent * */ case MotionEvent.ACTION_MOVE: int dx =(int)event.getRawX() - lastX; int dy =(int)event.getRawY() - lastY; int left = v.getLeft() + dx; int top = v.getTop() + dy; int right = v.getRight() + dx; int bottom = v.getBottom() + dy; if(left < 0){ left = 0; right = left + v.getWidth(); } if(right > screenWidth){ right = screenWidth; left = right - v.getWidth(); } if(top < 0){ top = 0; bottom = top + v.getHeight(); } if(bottom > screenHeight){ bottom = screenHeight; top = bottom - v.getHeight(); } v.layout(left, top, right, bottom); Log.i("", "position:" + left +", " + top + ", " + right + ", " + bottom); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_UP: break; } return false; }}); } private void initUI() { webview.getSettings().setJavaScriptEnabled(true);// 启用javascript脚本程序 webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 webview.getSettings().setSupportZoom(false);// //支持缩放 // webview.getSettings().setUseWideViewPort(true); //将图片调整到适合webview的大小 // webview.getSettings().setPluginState(PluginState.ON); webview.getSettings().setBuiltInZoomControls(true);// 设置支持缩放 webview.getSettings().setDefaultTextEncodingName("UTF-8"); webview.loadUrl(url); // 加载网络中的index.html. webview.setWebViewClient(new MyWebViewClient()); // 设置滚动条样式这样设置就不会出现右边和下边的滚动条了 // webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); webview.setDownloadListener(new MyWebViewDownLoadListener()); // 设置缓存 webview.getSettings().setDomStorageEnabled(true); webview.getSettings().setAppCacheMaxSize(1024 * 1024 * 8);// 设置缓冲大小,我设的是8M String appCacheDir = this.getApplicationContext() .getDir("cache", Context.MODE_PRIVATE).getPath(); webview.getSettings().setAppCachePath(appCacheDir); webview.getSettings().setAllowFileAccess(true); webview.getSettings().setAppCacheEnabled(true); webview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); webviewLayout.addView(webview); } private void doQuery(){ GetNoticeInfo getInfo = new GetNoticeInfo(); getInfo.execute(); } private class GetNoticeInfo extends AsyncTask<Void, Void, String> { protected String doInBackground(Void... params) { try { ClientContext context = application.getClientContext(); if(null==context){ context = ClientContext.getClientContext( Constants.SERVER_URL, Constants.ANONYMOUS, Constants.ANONYMOUS); application.setClientContext(context); } INewsManager manager = context .getManager(INewsManager.class); //manager NoticeNewsBean bean = manager.find(NoticeNewsBean.class, id); if(newslist==null){ newslist = new ArrayList<NoticeNewsBean>(); } newslist.add(bean); Log.i("NxwPushInfoDetailActivity", "获取成功"); } catch (Exception e) { Log.i("NxwPushInfoDetailActivity", "获取失败"); e.printStackTrace(); } return null; } } private class MyWebViewDownLoadListener implements DownloadListener { @Override public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { Uri uri = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } } private class MyWebViewClient extends WebViewClient { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } } //详情的上一条 private void toForward(){ int poi = position - 1; if(poi>-1){ NoticeNewsBean bean = newslist.get(poi); String urlString = Constants.NXW_MODULER_URL_DETAIL_BASE+bean.getGuid(); webview.loadUrl(urlString); position = poi; }else { NxwPushInfoDetailActivity.this.finish(); } } //详情下一条 private void toNext(){ int poi = position + 1; if(poi<newslist.size()){ NoticeNewsBean bean = newslist.get(poi); String urlString = Constants.NXW_MODULER_URL_DETAIL_BASE+bean.getGuid(); webview.loadUrl(urlString); position = poi; }else { NxwPushInfoDetailActivity.this.finish(); } } @Override public void onShowPress(MotionEvent e) { // TODO Auto-generated method stub } @Override public boolean onSingleTapUp(MotionEvent e) { // TODO Auto-generated method stub return false; } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // TODO Auto-generated method stub return false; } @Override public void onLongPress(MotionEvent e) { // TODO Auto-generated method stub } }