/**============================================================
* 版权: 久其软件 版权所有 (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
}
}
}