模仿网易新闻图片点击放大效果

简介:
先把效果拿出来看一下,点击新闻图片可以弹出一个DIALOG放大


原理如下:
服务端需要处理:
1、定义一个新闻浏览页面,如news_list.php?newsid=1
把新闻浏览的内容读取出来

需要注意的是内容里的图片,需要给图片增加一个事件onClick=\"javascript:contactsAction.setImgSrc('$url')\" 



$code = "<img src=\"$turl\" border=\"0\"  onClick=\"javascript:contactsAction.setImgSrc('$url')\"  style=\"$styleCss\" onload=\"$onload\" $alt>";


客户端处理

1、bbsinfo_listhtml.xml 新闻内容显示模版
2、bbsimgshow.xml 新闻图片点击放大效果
3、BbsinfoList.java 新闻内容读取页面
4、BbsImageShow.java 图片放大页面


处理过程:
新闻内容页放置webview控件
当内容显示出来时,点击图片触发服务端的JS事件,客户端抓取服务端返回的数据,然后打开图片放大窗体,进行显示。再点击一次就关闭窗体。
1、bbsinfo_listhtml.xml代码
  <WebView
            android:id="@+id/webView1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

2、bbsimgshow.xml代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  
<ImageView android:id="@+id/ivbig"
        android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>
</LinearLayout>

3、BbsinfoList.java

package com.wyf.tab;

import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.wyf.tab.util.Constant;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebView.HitTestResult;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

public class BbsinfoList extends Activity implements OnClickListener {
        private WebView wv;
        String tid;
        private String url;

        LinearLayout ld;
        private ImageView bt_left;
        Intent intent = new Intent();

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.bbsinfo_listhtml);
                // 加载动画
                ld = (LinearLayout) findViewById(R.id.loading);
                ld.setVisibility(View.VISIBLE);
                findview();
                //
                Thread thread = new Thread(new Runnable() {
                        public void run() {
                                Message message = new Message();
                                message.what = 0;
                                mHandler.sendMessage(message);
                        }
                });
                thread.start();
                // 获取传过来的参数
                Bundle bundle = this.getIntent().getExtras();
                tid = bundle.getString("tid");
                url = Constant.WEB_DIR + Constant.ThreadInfoUrl_webview + tid;

        }

        // 处理跳转到主Activity
        private Handler mHandler = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                        Log.d(">>>>>Mhandler", "开始handleMessage");
                        showContent(url);
                        Log.d(">>>>>Mhandler", "LoadActivity关闭");
                        if (msg.what == 0) {
                                ld.setVisibility(View.GONE);
                        }
                }
        };

        private void findview() {

                wv = (WebView) findViewById(R.id.webView1);
                wv.setVisibility(WebView.VISIBLE);
                WebSettings ws = wv.getSettings();
                ws.setUseWideViewPort(true);
                ws.setJavaScriptEnabled(true);
                wv.addJavascriptInterface(new ContactsPlugin(), "contactsAction");
                ws.setSupportZoom(true);
                wv.setWebChromeClient(new WebChromeClient() {

                        public void onProgressChanged(WebView view, int progress) {
                                setTitle("页面加载中,请稍候..." + progress + "%");
                                setProgress(progress * 100);
                                ld.setVisibility(View.VISIBLE);
                                if (progress == 100) {
                                        setTitle(R.string.app_name);
                                        ld.setVisibility(View.GONE);
                                }
                        }
                });
                //
                bt_left = (ImageView) findViewById(R.id.btn_left);
                bt_left.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                finish();
                        }
                });
        }

        private void showContent(String url) {
                wv.loadUrl(url);
        }

        @Override
        public void onClick(View v) {
                // TODO Auto-generated method stub

        }
        
        private class ContactsPlugin {            
            /**
             * 拨号
             */
            @SuppressWarnings("unused")
                public void setImgSrc(String imgSrc) {
                    //Toast.makeText(BbsinfoList.this, imgSrc + "数据加载完!",
                        //                Toast.LENGTH_LONG).show();
                        Log.e("imgurl", imgSrc);
                        Intent intent = new Intent(BbsinfoList.this, BbsImageShow.class);
                        Bundle bundle = new Bundle();
                        bundle.putString("imgSrc", imgSrc);
                        intent.putExtras(bundle);
                        startActivity(intent);
            }
    }

}

4、BbsImageShow.java

package com.wyf.tab;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
import android.widget.Toast;
public class BbsImageShow  extends Activity{
        private ImageView iv;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                requestWindowFeature(Window.FEATURE_NO_TITLE);
                setContentView(R.layout.bbsimgshow);

                findview();
        }

        /*
         * 初始化控件,加载数据
         */
        private void findview() {
                Intent intent = this.getIntent();
                Bundle bundle = intent.getExtras();
                String imgSrc = bundle.getString("imgSrc");
                //Bitmap bm = BitmapFactory.decodeFile(imgSrc);
                Bitmap bm = returnBitMap(imgSrc); 
                iv = (ImageView) findViewById(R.id.ivbig);
                iv.setImageBitmap(bm);
                iv.setOnClickListener(new ImageView.OnClickListener() {

                        public void onClick(View arg0) {
                                //Toast.makeText(ImageShow.this, "关闭图片", Toast.LENGTH_SHORT).show();
                                finish();
                        }
                });
                

        }
         //获取图片路径函数
          public static Bitmap returnBitMap(String url) {  
                  URL myFileUrl = null;  
                  Bitmap bitmap = null;  
                  try {  
                  myFileUrl = new URL(url);  
                  } catch (MalformedURLException e) {  
                  e.printStackTrace();  
                  }  
                  try {  
                  HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();  
                  conn.setDoInput(true);  
                  conn.connect();  
                  InputStream is = conn.getInputStream();  
                  bitmap = BitmapFactory.decodeStream(is);  
                  is.close();  
                  } catch (IOException e) {  
                  e.printStackTrace();  
                  }  
                  return bitmap;  
                } 
}


相关文章
|
9月前
|
数据采集 人工智能 自动驾驶
VSI-Bench:李飞飞谢赛宁团队推出视觉空间智能基准测试集,旨在评估多模态大语言模型在空间认知和理解方面的能力
VSI-Bench是由李飞飞和谢赛宁团队推出的视觉空间智能基准测试集,旨在评估多模态大型语言模型(MLLMs)在空间认知和理解方面的能力。该基准测试集包含超过5000个问题-答案对,覆盖近290个真实室内场景视频,涉及多种环境,能够系统地测试和提高MLLMs在视觉空间智能方面的表现。
287 16
VSI-Bench:李飞飞谢赛宁团队推出视觉空间智能基准测试集,旨在评估多模态大语言模型在空间认知和理解方面的能力
|
9月前
|
机器学习/深度学习 数据采集 人工智能
智能化运维在现代数据中心的应用与挑战####
本文深入探讨了智能化运维(AIOps)技术如何革新现代数据中心的运维管理,通过集成人工智能、大数据分析及自动化工具,显著提升系统稳定性、效率和响应速度。文章首先概述了AIOps的核心概念与技术框架,随后详细分析了其在故障预测、异常检测、容量规划及事件响应等方面的应用实例,最后探讨了实施过程中面临的数据质量、技能匹配及安全性等挑战,并提出了相应的应对策略。本研究旨在为数据中心管理者提供关于采纳和优化AIOps实践的洞见,以期推动行业向更高效、智能的运维模式转型。 ####
|
12月前
|
监控 安全 数据安全/隐私保护
服务器管理
服务器管理
398 5
|
算法 数据安全/隐私保护 异构计算
基于FPGA的MSK调制解调系统verilog开发,包含testbench,同步模块,高斯信道模拟模块,误码率统计模块
升级版FPGA MSK调制解调系统集成AWGN信道模型,支持在Vivado 2019.2中设置不同SNR仿真误码率。示例SNR值从0到15,结果展示解调质量随SNR提升。MATLAB仿真验证了MSK性能,图片显示了仿真结果。 ### 理论概要 研究聚焦于软件无线电中的MSK调制解调,利用Verilog实现。MSK是一种相位连续、恒包络的二进制调制技术,优点包括频谱效率高。系统采用无核设计,关键模块包括调制器、解调器和误码检测。复位、输入数据、中频信号等关键信号通过Verilog描述,并通过Chipscope在线观察。
264 6
基于FPGA的MSK调制解调系统verilog开发,包含testbench,同步模块,高斯信道模拟模块,误码率统计模块
|
Java 程序员 开发者
Java中的异常处理:深入理解try-catch-finally
在Java的世界中,异常处理是维护程序稳定性的关键机制之一。本文将深入探讨try-catch-finally结构的内部工作原理,揭示其背后的设计哲学,并通过具体实例展示如何优雅地处理异常情况。通过本文的学习,读者将能够更加自信地面对可能出现的各种异常,并采取有效措施以确保程序的健壮性和可靠性。
262 4
|
存储 分布式计算 Hadoop
Hadoop性能问题
【7月更文挑战第12天】
180 11
|
监控 Rust 安全
Rust代码在公司电脑监控软件中的内存安全监控
使用 Rust 语言开发的内存安全监控软件在企业中日益重要,尤其对于高安全稳定性的系统。文中展示了如何用 Rust 监控内存使用:通过获取向量长度和内存大小来防止泄漏和溢出。此外,代码示例还演示了利用 reqwest 库自动将监控数据提交至公司网站进行实时分析,以保证系统的稳定和安全。
603 2
|
前端开发 JavaScript API
打造在线教育平台:Python后端与Vue前端的完美融合
【4月更文挑战第10天】本文探讨了如何利用Python后端与Vue前端构建功能强大、用户体验良好的在线教育平台。通过Python的Django或Flask框架搭建稳定API服务,结合Vue.js的组件化和数据驱动特性创建高效用户界面。步骤包括确定平台需求、构建后端、创建前端、前后端交互、实现认证授权、优化体验以及测试部署。这种技术融合为在线教育市场提供了一个高效、可扩展的解决方案,适应未来教育平台的智能化、个性化和多元化趋势。
581 1
|
Linux 计算机视觉 Python
在Linux系统上安装OpenCV
在Linux系统上安装OpenCV
1478 0