Android实现imageView在屏幕中缩放

Android使用缩放动画放大你的图片 注:本篇文章是对官方开发文档的翻译,加上自己的理解和分析。 地址:https://developer.android.com/training/animation/zoom 本篇文章所实现的功能: 触摸一张ImageView后开始展示缩放动画,将视图从缩略图放大为填充屏幕的全尺寸图像,并且点击大图后还能够原路返回,缩放回去。无图无真相,先来看看效果图: 实现的代码中你需要知道的一些理论... 阅读详情

1、要求


Android中实现图片的缩放,并且图片不能完全离开屏幕。(需求比较特殊)
(1)初始化自适应屏幕的宽和高;
(2)图片可以缩放,限制图片的最大和最小缩放值;
(3)图片可以移动,但不能完全移动屏幕,即在屏幕中移动;
(4)向下移动,图片距离顶部不能超过paddingScreenMin,向上移动,图片距离底部不能超过paddingScreenMin;
(5)向左移动,如果图片放大的宽度大于屏幕的宽度,图片距离右边不能超过paddingScreenMin,如果图片放大的宽度小于屏幕的宽度,图片距离右边不能超过paddingScreenMax;
(6)向右移动,如果图片放大的宽度大于屏幕的宽度,图片距离左边不能超过paddingScreenMin,如果图片放大的宽度小于屏幕的宽度,图片距离左边不能超过paddingScreenMax;

    

2 基础知识

实现缩放和移动必须要了解Matrix的属性和方法,缩放的属性是MSCALE_X、MSCALE_Y,移动的属性是MTRANS_X、MTRANS_Y,获得这些属性的方法是void getValues (float[] values),values是一个含有9个值的一维数组。

è¿éåå¾çæè¿°

3 源代码

 

3.1 xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_gravity="center_horizontal"
    android:gravity="center_horizontal"
    android:background="@color/colorAccent"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <ImageView
        android:id="@+id/report"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center_horizontal"
        android:src="@drawable/report"/>
</LinearLayout>

3.2 java文件

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;

public class ImageScaleActivity extends AppCompatActivity{

    private ImageView imageViewECG = null;

    private Matrix matrix = null;
    private Matrix saveMatrix = null;

    private boolean isFirstTouch = true;
    private float maxScale = 2f;
    private float minScale = 0.1f;

    private float imageWidth = 1.0f;
    private float imageHeight = 1.0f;

    private float imageWidthInit = 1.0f;
    private float imageHeightInit = 1.0f;
    private float paddingScreenMin = 10.0f;
    private float paddingScreenMax = 10.0f;

    private PointF startPoint = null;
    private PointF middlePoint = null;

    private float oldDistance = 1f;

    private static final int NONE = 0;
    private static final int DRAG = 1;
    private static final int ZOOM = 2;
    private int mode = NONE;

    private float[] matrixValues = null;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_scale);

        this.matrix = new Matrix();
        this.saveMatrix = new Matrix();
        this.matrixValues = new float[9];

        this.startPoint = new PointF();

        this.imageViewECG = this.findViewById(R.id.report);
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.report);
        this.imageWidth = bitmap.getWidth();
        this.imageHeight = bitmap.getHeight();

        this.imageViewECG.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // Initial the image view
                ImageView imageView = (ImageView)v;
                imageView.setScaleType(ImageView.ScaleType.MATRIX);

                // Initial the matrix
                matrix.set(imageView.getImageMatrix());

                // Initial the
                if(isFirstTouch){
                    isFirstTouch = false;
                    // Get the values of matrix
                    matrix.getValues(matrixValues);
                    // Initial the width of screen, scaleX = matrixValues[0], scaleY = matrixValues[4]
                    minScale = matrixValues[0];

                    // Initial the width and height
                    imageWidthInit = imageWidth*minScale;
                    imageHeightInit = imageHeight*minScale;
                    paddingScreenMax = matrixValues[2];
                }

                // Set the gestures
                switch (event.getAction() & MotionEvent.ACTION_MASK){
                    // Single finger
                    case MotionEvent.ACTION_DOWN:
                        matrix.set(imageView.getImageMatrix());
                        saveMatrix.set(matrix);
                        startPoint.set(event.getX(), event.getY());
                        mode = DRAG;
                        break;

                    // Double fingers
                    case MotionEvent.ACTION_POINTER_DOWN:
                        oldDistance = distanceDoubleFinger(event);
                        if(distanceDoubleFinger(event)>10f){
                            middlePoint = middlePoint(event);
                            saveMatrix.set(matrix);
                            mode = ZOOM;
                        }
                        break;

                    // Finger slide
                    case MotionEvent.ACTION_MOVE:
                        if (mode == DRAG) {
                            // One finger slide
                            slideImage(event.getX() - startPoint.x, event.getY() - startPoint.y);
                        } else if (mode == ZOOM) {
                            // The double finger slide
                            float newDistance = distanceDoubleFinger(event);

                            // Get the values of matrix
                            matrix.getValues(matrixValues);
                            float newScale = newDistance/oldDistance;
                            float realNewScale = matrixValues[0] * newScale;

                            // Limit zooming
                            if (newDistance > 10f && (realNewScale>=minScale && realNewScale<=maxScale) ) {
                                matrix.set(saveMatrix);
                                matrix.postScale(newScale, newScale, middlePoint.x, middlePoint.y);
                            }
                        }
                        break;

                    // Reset the double finger
                    case MotionEvent.ACTION_UP:
                    case MotionEvent.ACTION_POINTER_UP:
                        mode = NONE;
                        break;
                }
                // Reset the image view
                imageView.setImageMatrix(matrix);

                return true;
            }
        });

    }


    /**
     * @param event The touch of event
     * @return The distance of two point
     */
    private float distanceDoubleFinger(MotionEvent event) {
        float x = event.getX(0) - event.getX(1);
        float y = event.getY(0) - event.getY(1);
        return Float.valueOf(String.valueOf(Math.sqrt(x * x + y * y))) ;
    }

    /*
     * @param event The touch of event
     * @return The PointF of middle
     */
    private PointF middlePoint(MotionEvent event) {
        float x = event.getX(0) + event.getX(1);
        float y = event.getY(0) + event.getY(1);
        return new PointF(x / 2, y / 2);
    }

    /**
     *  Slide the image
     * @param distanceX Horizontal sliding distance
     * @param distanceY Vertical sliding distance
     */
    private void slideImage(float distanceX, float distanceY){
        // Get the values
        float[] slideMatrixValue = new float[9];
        this.matrix.getValues(slideMatrixValue);
        float slideMatrixDX = slideMatrixValue[2];
        float slideMatrixDY = slideMatrixValue[5];

        float realWidth = this.imageWidth * slideMatrixValue[0];
        float realHeight = this.imageHeight * slideMatrixValue[0];

        // There are four cases for image sliding
        if(distanceY >= 0){// Slide bottom
            if(slideMatrixDY+distanceY < this.paddingScreenMin){
                slideLeftRight(distanceX, distanceY, realWidth, slideMatrixDX);
            }
        }else { // distanceY < 0, Slide top
            if(-(realHeight-this.imageHeightInit+slideMatrixDY+distanceY) < this.paddingScreenMin){
                slideLeftRight(distanceX, distanceY, realWidth, slideMatrixDX);
            }
        }
    }

    /**
     * Slide the image left and right
     * @param distanceX Horizontal slide distance
     * @param distanceY Vertical slide distance
     * @param realWidth The width of zoomed image
     * @param slideMatrixDX The horizontal slide distance recorded in matrix
     */
    private void slideLeftRight(float distanceX, float distanceY, float realWidth, float slideMatrixDX){
        // Get the width of screen
        float screenWidth = this.imageWidthInit+2*paddingScreenMax;

        if (distanceX >= 0) {// distanceX >= 0
            // Swipe to the right
            if(realWidth > screenWidth){
                // The size of the enlarged picture is larger than that of the screen.
                if((slideMatrixDX+distanceX) < this.paddingScreenMin) {
                    this.matrix.set(this.saveMatrix);
                    this.matrix.postTranslate(distanceX, distanceY);
                }
            }else {
                if((slideMatrixDX+distanceX) < this.paddingScreenMax) {
                    this.matrix.set(this.saveMatrix);
                    this.matrix.postTranslate(distanceX, distanceY);
                }
            }
        } else {// distanceX < 0
            // Swipe to the left
            if(realWidth > screenWidth){
                // The size of the enlarged picture is larger than that of the screen.
                if((screenWidth-realWidth-slideMatrixDX-distanceX) < this.paddingScreenMin) {
                    this.matrix.set(this.saveMatrix);
                    this.matrix.postTranslate(distanceX, distanceY);
                }
            }else {
                if((screenWidth-realWidth-slideMatrixDX-distanceX) < this.paddingScreenMax) {
                    this.matrix.set(this.saveMatrix);
                    this.matrix.postTranslate(distanceX, distanceY);
                }
            }
        }
    }

}

Android中的图片按比例缩放 通过使用上述不同的scaleType属性值,我们可以根据具体的需求来调整图片的缩放方式,从而满足界面设计的要求。在Android开发中,我们常常需要在界面中显示图片,并且希望图片能够按照一定比例进行缩放。这个属性可以应用于ImageView控件,用来指定图片在控件中的缩放方式。通过使用android:scaleType属性,我们可以灵活地控制图片的缩放行为。下面我将介绍几种常用的scaleType属性值,并给出相应的源代码示例,以便更好地理解和应用这些属性。Android中的图片按比例缩放。 阅读详情

相关推荐

Android ImageView视图的七种图片缩放类型

前言ImageView默认图片居中显示,默认图片的缩放类型为scaleType属性为fitCenter。一、scaleType属性为fitCenter,默认就是这个属性。七、scaleType属性为centerInside。六、scaleType属性为centerCrop。三、scaleType属性为fitStart。四、scaleType属性为fitEnd。五、scaleType属性为center。二、scaleType属性为fitXY。......

路宇的博客 5965

Android系统ImageView图像显示控件ScaleType属性的八种缩放规则

Android系统ImageView图像显示控件ScaleType属性的八种缩放规则

bluefire1126的博客 1210

android图片等比例缩放 填充屏幕

用IamgeView的 android:scaleType  设置属性的时候  填充屏幕出现的各种问题 /** * 将图片等比例缩放 setAdjustViewBounds setMaxWidth setMaxWidth必须同时设置才有效 * * @param context * @param view * 父容器 * @param image

村头那抠脚大叔的专栏 1万+

一起Talk Android吧(第五百四十二回:ImageView的缩放)

本章回中主要介绍了如何对ImageView显示的图片进行缩放,介绍了实现缩放的方法,并且通过文字结合代码的方式进行了介绍。

talk_8的专栏 861

Android ImageView图片叠加与自适应布局实战教程

ImageView是Android开发中用于显示图片的常用组件。它不仅可以加载本地资源文件中的图片,还能从网络地址获取图片并展示。此组件对图片的处理包括旋转、缩放、裁剪等。理解其基本使用方法是进行图像处理和界面开发的基础。ImageView组件在Android中用于展示图片,而ScaleType属性是其最核心的部分之一,它决定了图片如何适应到ImageView的边界。ScaleType的属性值有多种,每种都有其特定的行为和效果,对于图片的展示有着决定性的作用。matrix。

weixin_42589700的博客 1041

Android源码——ImageView控件缩放和旋转图片源码.zip

Android源码——ImageView控件缩放和旋转图片源码.zip

Android ImageView图片代码实现按屏幕宽度等比例缩放

/** * 设置图片根据屏幕宽度进行等比例缩放 * @param imageView */ public static void setImageMatchScreenWidth(ImageView imageView){ BitmapDrawable bitmapDrawable = (BitmapDrawable) imageView.getDrawabl...

weixin_30510153的博客 421

MLNX_OFED 5.4-3.7.5.0 驱动安装:银河麒麟V10SP2 ARM 内核升级后编译避坑 3 步

本文详细介绍了在银河麒麟V10SP2 ARM环境下安装MLNX_OFED 5.4-3.7.5.0驱动的完整流程,包括内核升级后的驱动兼容性挑战、编译环境准备、分步编译与安装流程以及性能优化与故障排查。特别针对国产化ARM服务器(如华为Atlas系列)提供了实用的解决方案和常见问题处理建议,帮助用户顺利完成mlnx网卡驱动的安装与配置。

weixin_29184075的博客 403

Android 自定义ImageView支持缩放,拖拽,方便复用

今天刚发了一篇关于ImageView的缩放和拖拽的博客,然后我想了下,将他自定义下,方便我们来复用这个imageView,效果我就不多说了,http://blog.youkuaiyun.com/xiaanming/article/details/8827257就是这个效果,我只是把他抽出来自定义了下,代码还是贴上吧,我也将demo上传一下,有疑问大家指出来,大家共同学习,共同进步,呵呵 package

Mobile Internet developer 3万+

LTE信令流程及业务流程

eNB返回E-RAB建立响应消息,E-RAB建立列表信息中包含成功建立的承载信息,E-RAB建立失败列表消息中包含没有成功建立的承载消息。3)当下行数据达到时,网络侧先对UE进行寻呼,随后UE发起随机接入过程,并发起service request过程。用户面:S-GW向eNB发送承载建立请求,包含(IMSI, QoS, TFT, TEID, LBI等)控制面:MME向eNB发送E-RAB建立请求,包含E-RAB ID,QoS,S-GW TEID。3)在S1接口上建立S1承载,在Uu接口上建立数据无线承载。

qq_44390640的博客 4582

Source Insight 4.0 及最新版序列号验证机制全解析:如何快速定位关键函数并构造有效Key

本文深入解析了Source Insight 4.0及最新版的序列号验证机制,详细介绍了如何快速定位关键函数并构造有效Key。通过静态分析和动态调试技术,帮助开发者理解现代软件保护的设计哲学,掌握逆向分析方法论,提升安全研究能力。

weixin_26642481的博客 426

ImageView的src和background的区别、padding的使用技巧、ImageView根据屏幕对缩放

一、ImageView中XML属性src和background的区别: background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸 。src是图片内容(前景),bg是背景,可以同时使用。 此外: scaleType只对src起作用;bg可设置透明度,比如在ImageButton中就可以用android:scaleType控制图片的缩放

丶ban 4335

RK3588 buildroot 制作的系统增加 docker 支持

RK3588 使用buildroot制作的系统添加 docker 和 docker-compose 的功能

荻夜的博客 1567

Android ImageView移动和缩放

要实现ImageView的缩放就要使用到我们大学里面学习的线代里面的矩阵(Matrix),我们看一下源码就可以知道 public static final int MSCALE_X = 0; //!< use with getValues/setValues public static final int MSKEW_X = 1; //!< use with getValue

刘永祥的专栏 2619

【100%通过率】2024华为OD机试真题E卷 C++ 实现【栈数据合并/空栈压数】

向一个空栈压入正整数,每当压入一个整数时,执行以下规则(设: 栈顶至栈底整数依次编号为n1、n2...nx, n1为最新压入的整数)

MISAYAONE的博客 1553

【ROS】Nav2源码之nav2_collision_monitor(碰撞监测)详解

nav2_collision_monitor碰撞监视器是一个节点,为机器人提供了一个额外的安全级别。它使用来自传感器的数据,执行若干与避免碰撞相关的任务,绕过成本图和轨迹规划器,监测是否需要紧急停止或者减速。

郭老二 1456

android 固定大小填充图片大小,Android:尝试缩放ImageView,因此图像填充宽度并缩放到高度...

我正在尝试编写简单的幻灯片放映程序。我希望它显示不同大小的图片,然后缩放,因此宽度会填满屏幕。我可以改变图像视图的大小,并在调试器中设置为新的宽度,但它不会缩放位图, 是这样做的一种方式吗?Android:尝试缩放ImageView,因此图像填充宽度并缩放到高度代码:ImageView picImage = (ImageView) findViewById(0);// R.id.viewpic);...

weixin_31231693的博客 321

JavaFx 教程

JavaFx 教程

2012年开始工作,全栈开发老兵,目前已是一个老师,分享这么多年的心得体会 784

imageview缩放问题,不能对齐屏幕的顶部

最近在写界面的时候发现了一个wen

a465456465的专栏 1836

基于逆向工程的中国裁判文书网爬虫技术深度解析

本文详细介绍了中国裁判文书网爬虫的开发过程,涵盖了从基础爬取到高级功能的完整解决方案。逆向工程分析:理解网站的反爬机制和加密逻辑浏览器自动化:使用Playwright模拟真实用户行为参数加密:通过JavaScript执行环境生成加密参数智能调度:控制请求频率,避免被检测错误处理:完善的异常处理和重试机制。

2201_76125261的博客 2145

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

android图片缩放模式,Android使用缩放动画放大你的图片

注:本篇文章是对官方开发文档的翻译,加上自己的理解和分析。地址:https://developer.android.com/training/animation/zoom本篇文章所实现的功能:触摸一张ImageView后开始展示缩放动画,将视图从缩略图放大为填充屏幕的全尺寸图像,并且点击大图后还能够原路返回,缩放回去。无图无真相,先来看看效果图:实现的代码中你需要知道的一些理论知识(大神请忽略):...

weixin_35064596的博客 1862

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Android重写ImageView实现图片镜像效果

前两天朋友问我一个问题,如何实现从手机系统相册加载一张图片,实现拖拽、缩放功能并且能镜像显示,当时我的第一反应是继承ImageView,重写onDraw方法,下面就按照这个思路实现下需求。 从系统相册选择图片 打开系统相册采用隐式Intent,因为调用者需要接受返回的结果,所以使用startActivityForResult启动Activity,打开系统相册核心代码如下 public fin...

从技术到艺术 4891

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android 设置ImageView宽度固定,其高度按比例缩放适应

今天和项目经理对喷了一下,他说在应用的列表数据中的图片应该宽度固定,高度按比例缩放自适应,我说,那岂不是很丑!直接让运营那边把图片处理成固定宽高比不就好了,省的我客户端麻烦了。 这家伙不同意,为毛呢,因为我们公司的图片尼玛全部是从别的网站上荡过来的,几万张图片,本身不知道图片宽度和高度。。。。我日。。。。   好吧,既然提出了这么个需求,那我就实现呗,丑不丑就我就不管了。。。

jmu_zhoumei的博客 1027

基于androidstudio利用imageview开发一款可以缩放移动的图像App

/图像放大缩小后的对象的高度 = scaleBitmap.getHeight();//图像放大缩小后的对象的宽度 = scaleBitmap.getWidth();//原始对象图像宽度放大率,初始值为1。//按照手势的缩放比例,将图片的matrix对象也缩放这么多。//在一次缩放后,将初始的两指间距离设置为当前的两指间距离。//图像放大缩小后的对象。//对放大后的图像截取到屏幕进行显示,左上角坐标。//和缩放前两指间的距离比较,计算出缩放比例。//拿取缩放后两指之间的距离。//拿取当前两指间的距离。

m0_57602440的博客 709

android imageview 重写,Android 重写ImageView实现图片手势功能

import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Matrix...

weixin_32790659的博客 288

ImageView,Bitmap的浅析

多low,也得做好总结——题记 一个app客户端启动时候,一般会在开始的欢迎界面展示图片,这时候会用的ImageView组件负责展示(一般是静态图片),图片的处理(包括缩放等)则需要用的Bitmap类来处理,这是这个两个类在功能上的区别,今天看了公司的项目,发现了欢迎界面的图片展示是通过这样的逻辑实现的: 1.将图片A放到资源包里面 2.在欢迎界面中,使用imageview组件,宽度为mat

lichangshun3的博客 975
上一篇: Spring boot入门Hello Word!
下一篇: SAX和XmlPull解析XML文件
MasonYyp
博客等级 码龄9年 301粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值