/**============================================================ * 版权: 久其软件 版权所有 (c) * 包: com.jiuqi.njt.ui * 修改记录: * 日期 作者 内容 * ============================================================= * 2013-10-06 malingya * ============================================================*/ package com.jiuqi.njt.ui; import java.text.RuleBasedCollator; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; 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.ViewTreeObserver; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.view.animation.AnimationUtils; 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 android.widget.Toast; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.PlatformActionListener; import cn.sharesdk.framework.ShareSDK; import cn.sharesdk.framework.Platform.ShareParams; import cn.sharesdk.wechat.moments.WechatMoments; import com.jiuqi.mobile.nigo.comeclose.bean.app.news.NoticeNewsBean; import com.jiuqi.njt.R; import com.jiuqi.njt.ui.NjtMainActivity.MyListener; 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; import com.tencent.mm.sdk.openapi.IWXAPI; import com.tencent.mm.sdk.openapi.WXAPIFactory; /** * <p> * 农信网功能模块 * </p> * * <p> * Copyright: 版权所有 (c)<br> * Company: 久其 * </p> * * @author malingya * @version 2013-10-06 */ public class NxwModulerDetailActivity extends Activity implements OnTouchListener, OnGestureListener { private static int moveDistance = 240; private FrameLayout webviewLayout; private WebView webview; private String url; private GestureDetector gestureDetector; private ImageView speechButton; private int height = 1; private int position; private ArrayList<NoticeNewsBean> newslist; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); doinit(); } private void doinit() { initParam(); initWidgets(); initListeners(); initUI(); } private void initParam() { moveDistance = UIUtil.getScreenWidth(this)*1/3; url = getIntent().getStringExtra(Constants.PARAM_URL); newslist = (ArrayList<NoticeNewsBean>) getIntent().getSerializableExtra("newslist"); position = getIntent().getIntExtra("position", -1); } 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) { NxwModulerDetailActivity.this.finish(); } }, "分享", new OnClickListener() { @Override public void onClick(View v) { // Intent intent = new Intent(NxwModulerDetailActivity.this,NjtMainActivity.class); // intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); // startActivity(intent); // NxwModulerDetailActivity.this.finish(); shareFriend(); } }); speechButton = (ImageView) findViewById(R.id.speechButton); webviewLayout = (FrameLayout) findViewById(R.id.webview); webview = new WaitPageWebView(NxwModulerDetailActivity.this, null); getHeightParams(); gestureDetector = new GestureDetector(NxwModulerDetailActivity.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) { //----begin设置浮动框的弹出和收回-------------------- if (Math.abs(e1.getY()-e2.getY())<moveDistance&&e1.getX() - e2.getX() > moveDistance) { Log.i("lxy", "---> Fling to left"); if(newslist!=null && newslist.size()>1){ webview.setAnimation(AnimationUtils.loadAnimation(NxwModulerDetailActivity.this, R.anim.left_in)); toNext(); } }else if (e1.getX() - e2.getX() < -moveDistance&&Math.abs(e1.getY()-e2.getY())<moveDistance) { Log.i("lxy", "---> Fling to right"); if(newslist!=null && newslist.size()>1){ webview.setAnimation(AnimationUtils.loadAnimation(NxwModulerDetailActivity.this, R.anim.right_out)); toForward(); } } //-----end设置浮动框的弹出和收回--------------------------------- //-----begin设置左右滑动翻页----------------------- //-----end设置左右滑动翻页------------------------ 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) { // if (keyCode == KeyEvent.KEYCODE_BACK && webview.canGoBack()) { // 表示按返回键时的操作 // webview.goBack(); // 后退 // return true; // 已处理 // } else if (keyCode == KeyEvent.KEYCODE_BACK) { NxwModulerDetailActivity.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) { } }); speechButton.setOnTouchListener(new OnTouchListener(){ int lastX, lastY; int x = 0, y = 0; @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub int ea=event.getAction(); Log.i("TAG", "Touch:"+ea); switch(ea){ case MotionEvent.ACTION_DOWN: lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); x = lastX; y = lastY; 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: if (Math.abs(lastX - x) < height/16 && Math.abs(lastY - y) < height/16 ) { 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(NxwModulerDetailActivity.this); ttsUtil.textToSpeechDialog(UIUtil.delHTMLTag(contentString.toString()));; } } 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 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 { UIUtil.showMsg(NxwModulerDetailActivity.this, "已到最新一条"); // NxwModulerDetailActivity.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 { UIUtil.showMsg(NxwModulerDetailActivity.this, "已到最后一条"); // NxwModulerDetailActivity.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 } private void getHeightParams() { ViewTreeObserver vObserver = speechButton.getViewTreeObserver(); vObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // TODO Auto-generated method stub speechButton.getViewTreeObserver().removeGlobalOnLayoutListener(this); height = speechButton.getHeight(); } }); } private void shareFriend(){ ShareSDK.initSDK(this); IWXAPI api = WXAPIFactory.createWXAPI(this, Constants.TENCENT_APP_KEY, false); api.registerApp(Constants.TENCENT_APP_KEY); boolean sIsWXAppInstalledAndSupported = api.isWXAppInstalled() && api.isWXAppSupportAPI(); if (sIsWXAppInstalledAndSupported) { ShareParams sp3 = new ShareParams(); sp3.setShareType(Platform.SHARE_TEXT); sp3.setTitle("好友分享:" + url); sp3.setText("好友分享:" + url); Bitmap imageData = BitmapFactory.decodeResource( this.getResources(), R.drawable.ic_launcher_new); sp3.setImageData(imageData); Platform plat = ShareSDK.getPlatform(NxwModulerDetailActivity.this, WechatMoments.NAME); plat.setPlatformActionListener(new MyListener()); // 设置分享事件回调 plat.share(sp3); } else { Toast.makeText(NxwModulerDetailActivity.this, "请安装微信", Toast.LENGTH_SHORT) .show(); } } class MyListener implements PlatformActionListener { @Override public void onCancel(Platform arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onComplete(Platform arg0, int arg1, HashMap<String, Object> arg2) { // TODO Auto-generated method stub } @Override public void onError(Platform arg0, int arg1, Throwable arg2) { // TODO Auto-generated method stub } } }