Android ImageView组件

Android 自定义组件实现圆角ImageView /这里做下判断,只有图片的宽高大于设置的圆角距离的时候才进行裁剪。//如果四个角的值没有设置,那么就使用通用的radius的值。//四个角:右上,右下,左下,左上。 阅读详情

参考资料:http://blog.youkuaiyun.com/shulianghan/article/details/18555131

http://www.cnblogs.com/plokmju/p/android__imageview.html


ImageView,直接继承自View类,用于显示任何Drawable对象。ImageView有两个子类 ImageButton 和 QuickContactBadge, ImageButton还有一个子类是 ZoomButton;


一、常用属性

1.调整边界,保持长宽比

同时满足下面三个条件:
android:adjustViewBounds:设置ImageView是否调整自己的边界来保持所显示图片的长宽比。
要与下面两个属性一起用才有效果。

android:maxHeight:设置ImageView的最大高度。
android:maxWidth:设置ImageView的最大宽度。

android:layout_width与android:layout_height都为wrap_content

2.裁剪保留空白:

android:cropToPadding,是否裁剪, 用来保留ImageView的padding。
与android:scrollY 属性一起使用的时候才有用,单独使用没有效果; 
即在滚动的时候, 滚动到边界, 边界的padding空白是否显示;

3.其他属性

android:scaleType:设置所显示的图片如何缩放或移动以适应ImageView的大小。
android:src:设置ImageView所显示的Drawable对象的ID。


android:scaleType的可选属性值:

matrix:使用矩阵进行缩放。
fitXY:横向、纵向独立缩放,以适应该ImageView。
fitStart:保持纵横比缩放图片,并且将图片放在ImageView的左上角。
fitCenter:保持纵横比缩放图片,缩放完成后将图片放在ImageView的中央。
fitEnd:保持纵横比缩放图片,缩放完成后将图片放在ImageView的右下角。
center:把图片放在ImageView的中央,但是不进行任何缩放。
centerCrop:保持纵横比缩放图片,以使图片能完全覆盖ImageView。
centerInside:保持纵横比缩放图片,以使得ImageView能完全显示该图片。

二、常用方法

1.缩放图片

View.setLayoutParams(new LinearLayout.LayoutParams(newWidth,newHeight))方法可以直接设定View下的所有控件的外观大小。同样适用于ImageView。

LayoutParmas params = new LinearLayout.LayoutParams(newWidth, newHeight);
params.gravity = Gravity.CENTER;
mImageView.setLayoutParams(params);

更好的方法是这样:
mImageView.getLayoutParmas().width = newWidth;
mImageView.getLayoutParmas().height = newHeight;
mImageView.requestLayout();

也可以用矩阵完成
// 计算缩放比例
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// 缩放矩阵
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
// 生成新的图片
bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);

2.旋转图片

// 获取当前待旋转的图片
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), images[currentImage]);
// 设置旋转角度
matrix.setRotate(rotate);
// 生成旋转后的图片
bitmap = Bitmap.createBitmap(bitmap, 0, 0
         , bitmap.getWidth(), bitmap.getHeight(), matrix, true);

3.设置图片

currentImage = (currentImage + 1) % images.length;
imageView.setImageResource(images[currentImage]);

4.设置透明度

imageView.setAlpha(alpha);  



三、缩放与旋转图片


ImageView的旋转涉及Matrix类,它表示一个3x3的坐标变换矩阵,在这个矩阵内,进行变换、旋转操作,需要通过构造函数显式的初始化之后才可以使用。

Demo布局:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"> 
    
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center"
        >
        <Button 
            android:id="@+id/button_last"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="上一张"            
            />
        <Button 
            android:id="@+id/button_next"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="下一张"
            />
    </LinearLayout>
    
    <TextView 
        android:id="@+id/text_view_alpha"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="透明度:255"
        android:paddingTop="5dp"
        />

    <SeekBar
        android:id="@+id/seek_bar_alpha"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="255"
        android:progress="255"
         />
    
    <TextView 
        android:id="@+id/text_view_zoom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="缩放"
        android:paddingTop="5dp"
        />    
    <SeekBar 
        android:id="@+id/seek_bar_zoom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="800"
        />
    
    <TextView 
        android:id="@+id/text_view_rotate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="旋转"
        />
    <SeekBar 
        android:id="@+id/seek_bar_rotate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="360"
        />

     <ImageView 
         android:id="@+id/image_view"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center"
         android:gravity="center"
         android:scaleType="fitCenter"
         android:src="@drawable/pic_1"
         />        

  
</LinearLayout>


MainActivity.java:

public class MainActivity extends Activity implements OnClickListener, OnSeekBarChangeListener{

    // 组件
    private Button btnLast, btnNext;
    private TextView tvAlpha, tvZoom, tvRotate;
    private SeekBar sbAlpha, sbZoom, sbRotate;
    private ImageView imageView;
    
    // 图片数组
    private int[] images;
    
    // 旋转矩阵
    private Matrix matrix;
    
    // 当前图片
    private int currentImage;

    // 初始图片大小
    // ImageView未绘制时getWidth()为0,此时用这个
    private int initWidth, initHeight;
    
    // 最小宽度
    private int minWidth = 50;
    
    // 图片长宽比
    private double currentImageRatio;
    
    // 图片缩放比例标记
    private boolean hasGetRatio = false;
    
    // 标示是否已经在ImageView的观察者中获取控件大小
    private boolean hasMeasured = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        // 初始化
        init();
    }
    
    /**
     * 在onCreate()中获取ImageView的初始宽度和高度
     */
    private void getImageViewSizeInit(){
        ViewTreeObserver vto = imageView.getViewTreeObserver();
        vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                if (!hasMeasured) {
                    // 获得初始宽高
                    initWidth = imageView.getMeasuredWidth();
                    initHeight = imageView.getMeasuredHeight();
                    // 将滑动条设置为对应位置
                    adjustZoomTvSb(initWidth, initHeight);
                    hasMeasured = true;
                }
                return true;
            }
        });
    }
    
    /*
     * 初始化
     */
    private void init(){
        btnLast = (Button) findViewById(R.id.button_last);
        btnNext = (Button) findViewById(R.id.button_next);
        tvAlpha = (TextView) findViewById(R.id.text_view_alpha);
        tvZoom = (TextView) findViewById(R.id.text_view_zoom);
        tvRotate = (TextView) findViewById(R.id.text_view_rotate);
        sbAlpha = (SeekBar) findViewById(R.id.seek_bar_alpha);
        sbZoom = (SeekBar) findViewById(R.id.seek_bar_zoom);
        sbRotate = (SeekBar) findViewById(R.id.seek_bar_rotate);
        imageView = (ImageView) findViewById(R.id.image_view);
        
        //添加事件监听器
        btnLast.setOnClickListener(this);
        btnNext.setOnClickListener(this);
        sbAlpha.setOnSeekBarChangeListener(this);
        sbZoom.setOnSeekBarChangeListener(this);
        sbRotate.setOnSeekBarChangeListener(this);
        
        // 给控制图片大小的SeekBar设置最大值为屏幕宽度
        DisplayMetrics metrics = getResources().getDisplayMetrics();
        sbZoom.setMax(metrics.widthPixels - minWidth);
        
        // 用观察者在onCreate中获取组件属性
        getImageViewSizeInit();
        
        // 初始化旋转矩阵
        matrix = new Matrix();
        
        // 添加图片
        images = new int[]{R.drawable.pic_1, R.drawable.pic_2, R.drawable.pic_3};
        currentImage = 0;       
        
    }
    
    /**
     * 调整缩放滑动条的位置和TextView显示
     * TextView SeekBar
     */
    private void adjustZoomTvSb(int width, int height){
        sbZoom.setProgress(width);
        tvZoom.setText("缩放:宽度 " + width + " px,高度 " + height + " px");
    }
    
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.button_last: // 上一张 按钮
            currentImage--;
            if (currentImage < 0) {
                currentImage = currentImage + images.length;
            }
            break;
        case R.id.button_next: // 下一张 按钮
            currentImage = (currentImage + 1) % images.length;
            break;
        default:
            break;
        }
        // 设置图片
        imageView.setImageResource(images[currentImage]);
//        adjustZoomTvSb(imageView.getWidth(), imageView.getHeight());
        // 每张图片比例不一样,要重新测定
        hasGetRatio = false;
    }

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
            boolean fromUser) {
        switch (seekBar.getId()) {
        // 透明度滑块
        case R.id.seek_bar_alpha:
            int alpha = progress;
            // 设置透明度
            imageView.setAlpha(alpha);        
            tvAlpha.setText("透明度:" + alpha);
            break;
        // 图片大小滑块
        case R.id.seek_bar_zoom:
            // 如果还没绘制图片,则不用计算和改变大小
            if (hasMeasured) {
                if (!hasGetRatio) {
                    currentImageRatio = 1.0 *imageView.getHeight() / imageView.getWidth();
                    Log.v("调试", "缩放比例为:" + currentImageRatio);
                    hasGetRatio = true;
                }
                int newWidth = progress + minWidth;
                int newHeight = (int) (newWidth * currentImageRatio);
                // 改变ImageView的大小
                imageView.getLayoutParams().width = newWidth;
                imageView.getLayoutParams().height = newHeight;
                imageView.requestLayout();
//                // 也可以用如下方法
//                LayoutParams params = new LinearLayout.LayoutParams(newWidth, newHeight);
//                params.gravity = Gravity.CENTER;
                tvZoom.setText("缩放:宽度 " + newWidth + " px,高度 " + newHeight + " px");
            }
            break;
        // 图片旋转滑块
        case R.id.seek_bar_rotate:
            // 获取当前待旋转的图片
            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), images[currentImage]);
            // 设置旋转角度
            matrix.setRotate(progress);
            // 生成旋转后的图片
            bitmap = Bitmap.createBitmap(bitmap, 0, 0
                    , bitmap.getWidth(), bitmap.getHeight(), matrix, true);
            // 绑定到图片控件上
            imageView.setImageBitmap(bitmap);
            tvRotate.setText("旋转:" + progress + "°");
        default:
            break;
        }
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
    }

}

效果图:



四、从互联网获取图片

Android4.0之后不能在主线程中访问网络,必须另开一条线程访问。在子线程中,无法直接操作UI控件的属性。解决方案就是,通过Thread类,进行多线程访问网络,再通过Handler类,进行消息传递。

Handler类的主要作用有两个:
在新启动的线程中发送消息。
在主线程中获取、处理消息。

为了让主线程能接受并处理新启动的线程发送的消息,Android通过回调的方式来实现,开发人员只需要重写Handler类中处理消息的方法,handleMessage(Message)即可,其中Message封装了发送过来的消息。

Handler包含如下方法,用于实现发送和处理消息:
void handleMessage(Message msg):处理消息的方法,用于被重写。
final boolean hasMessage(int what):检查消息队列中是否包含what属性为指定值的消息。
sendEmptyMessage(int what):立即发送空消息。
final boolean sendEmptyMessageDelayed(int what,long delayMillis):指定delayMillis毫秒之后发送空消息。
final boolean sendMessage(Message msg):立即发送消息。
final boolean sendMessageDelayed(Message msg,long delayMillis):指定delayMillis毫秒之后发送消息。

Message封装了线程中传递的消息,对于一般的数据,Message提供了getData()和setData()方法来获取与设置数据,其中操作的数据是一个Bundle对象,这个Bundle对象提供一系列的getXxx()和setXxx()方法用于传递基本数据类型。
在Bundle中提供了两个方法,专门用来传递对象的,但是这两个方法也有相应的限制,需要实现特定的接口,当然,一些Android自带的类,其实已经实现了这两个接口中的某一个,可以直接使用。方法如下:
putParcelable(String key,Parcelable value):需要传递的对象类实现Parcelable接口。
pubSerializable(String key,Serializable value):需要传递的对象类实现Serializable接口。

还有另外一种方式在Message中传递对象,那就是使用Message自带的obj属性传值,它是一个Object类型,所以可以传递任意类型的对象,Message自带的有如下几个属性:
int arg1:参数一,用于传递不复杂的数据,复杂数据使用setData()传递。
int arg2:参数二,用于传递不复杂的数据,复杂数据使用setData()传递。
Object obj:传递一个任意的对象。
int what:定义的消息码,一般用于确定消息的来源。

Demo:
必须声明联网权限:
<uses-permission android:name="android.permission.INTERNET"/>

activity_main.xml:
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"> 
    
    <Button 
        android:id="@+id/button_download"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="下载网络图片"
        />
    
    <TextView 
        android:id="@+id/textview_prompt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
    
    <ImageView 
        android:id="@+id/imageview_show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scaleType="fitCenter"
        />
  
</LinearLayout>

MainActivity.java:
package com.example.test;

import java.io.InputStream;
import java.util.Random;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{

    private Button btnDownload;
    private TextView tvPrompt;
    private ImageView ivShow;
    private Handler handler;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        
        btnDownload = (Button) findViewById(R.id.button_download);
        tvPrompt = (TextView) findViewById(R.id.textview_prompt);
        ivShow = (ImageView) findViewById(R.id.imageview_show);
        
        // 定义一个handler,用于接收消息
        handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                Bitmap bitmap = null;
                // 通过消息码确定使用什么方式传递图片信息
                if (msg.what == 0) {
                    bitmap = (Bitmap) msg.obj;
                    tvPrompt.setText("使用obj传递数据");
                } else {
                    Bundle bundle = msg.getData();
                    bitmap = (Bitmap) bundle.get("bitmap");
                    tvPrompt.setText("使用Bundle传递数据");
                }
                // 设置图片到ImageView中
                ivShow.setImageBitmap(bitmap);
            }
        };
        
        btnDownload.setOnClickListener(this);
    }
    
        
    // 事件监听器
    @Override
    public void onClick(View v) {
        // 清空之前获取的数据
        tvPrompt.setText("");
        ivShow.setImageBitmap(null);
        // 定义一个线程类
        new Thread() {
            @Override
            public void run() {
                try{
                    // 获取网络图片
                    InputStream input = HttpUtils.getImageViewInputStream();
                    Bitmap bitmap = BitmapFactory.decodeStream(input);
                    // 调整宽度为屏幕宽度
                    bitmap = zoomBitmap(bitmap);
                    Message msg = new Message();
                    Random rand = new Random();
                    int randNum = rand.nextInt(10);
                    // 通过随机数选择传递图片的方式
                    if (randNum / 2 == 0) {
                        msg.what = 0;
                        msg.obj = bitmap;
                    } else {
                        Bundle bundle = new Bundle();
                        bundle.putParcelable("bitmap", bitmap);
                        msg.what = 1;
                        msg.setData(bundle);
                    }
                    // 发送消息
                    handler.sendMessage(msg);
                } catch (Exception e) {
                    
                }
            }
        }.start();
    }
    
 // 调整图片大小
    private Bitmap zoomBitmap(Bitmap bitmap){
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        // 设置想要的大小,已知自己手机宽度为1080
        int newWidth = 1080;
        int newHeight = newWidth * height / width;
        // 计算缩放比例
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
        // 缩放矩阵
        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth, scaleHeight);
        // 返回新的图片
        return Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
        
    }

}


效果如图:

Android组件之ImageView Android ImageView组件使用指南:介绍了ImageView的基本用法,包括XML布局定义和Java代码设置。详细说明了scaleType的8种缩放模式,展示了样式设置方法(着色、阴影等),并提供了三种实现圆角图片的方案(CardView、代码设置、Glide库)。最后用Glide演示了圆形图片的实现,为Android开发者提供了全面的图片显示解决方案。 阅读详情

相关推荐

Android-progress-image-view-android带简单进度的androidImageView控件

progress-image-view-android 带简单进度的android ImageView控件

android图片查看器,实现图片加载进度监听,实现保存图片

1、添加依赖 implementation 'com.github.bumptech.glide:glide:4.6.1' compile 'com.github.chrisbanes:PhotoView:2.0.0' compile 'com.squareup.okhttp3:okhttp:3.9.0' 2、实现fragmentactivity: /** * 作者:created b...

meixi_android的博客 1510

电源工程师必看:平均电流模式BUCK双环控制详解(从传递函数到Psim仿真)

本文详细解析了平均电流模式BUCK变换器的双环控制策略,从传递函数推导到Psim仿真实现。针对电源工程师关注的环路设计和稳定性问题,深入比较了电压模式、峰值电流模式和平均电流模式的优缺点,并提供了12V/3A BUCK变换器的完整设计案例,帮助工程师掌握平均电流控制这一中高功率应用的首选方案。

weixin_42696271的博客 398

android 加载图片进度,Android实现图片加载进度提示

本文实例为大家分享了Android实现图片加载进度提示的具体代码,供大家参考,具体内容如下先上图:实现原理:第一个控件的实现原理是重写ImageView的onDraw()方法,利用Canvas的clipRect()方法控制图片的显示区域,主键扩大图片的显示区域,从而实现逐渐增加的效果关键代码:public class LoadingImageView extends ImageView {/***...

weixin_39830175的博客 357

如何下载era5数据?(两种方式)

供水利大数据云计算课程同学参考使用#

Camiel_sweet的博客 1万+

SuperPoint + LightGlue实战:低纹理墙面重建保姆级教程(附完整代码)

本文提供了一份针对低纹理墙面三维重建的实战教程。通过详细解析SuperPoint与LightGlue的核心参数调优,指导读者如何有效提取并匹配低纹理目标的特征点,并结合COLMAP完成从稀疏到稠密的重建流程,最终实现高精度建模。

weixin_29034963的博客 223

android 进度条边框,android – 使用进度条作为imageview的边框

所以你的观点现在看起来像那样: 所有你不需要做的就是改变两个视图的高度和重量 – 这是不同的编辑:现在你有这个: 删除这一行android:innerRadiusRatio="2.5"解决方案:我已经更改了一些文件:android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#...

weixin_39805255的博客 209

【STM32学习】(29)STM32实现595驱动三个数码管(标准库和HAL库实现)

我选用的单片机型号为:STM32F103系列 74LS595是一个串转并行输出的芯片,它能为单片机节省很多的IO口,应用场景广泛。 现要求三个数码管动态显示,常规设计都是并行实现,需要8个IO数据口,然后还需要3个IO片选数码管接口,这样大大占用了IO口,导致连接的外设变少。因此我们引入74LS595芯片。电路设计如下: 只需要三个共阴极数码管与三个595芯片级联即可完成,通过RCLK,SCK,SER三个IO即可完成对数码管的动态控制并显示。电路焊接的实物图如下: 要求完成功能:实现数.

XiaoCaiDaYong的博客 8265

Android自定义ProgressBar,实现漂亮的进度提示框

在android智能平板设备应用中,一项耗时的操作总要有个提示进度的框来提高用户的操作体验,操作进度提示框就显得很常用了。 系统自带的有进度条ProgressBar,一般用于显示一个过程,例如数据加载过程,文件下载进度,音乐播放进度等。但是样式太单一不好看,因此有必要自定义一个方便使用。 以下记录下封装的进度展示对话框ProgressDialog。 先来展示下效果图: 需要准备好素材。如上图中的那个旋转的圈圈,素材图是一张png图片,分辨率114x114: 如何实现自动旋转的效果呢,使用a

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 3560

别再混淆了!5分钟搞懂机器人导纳控制与阻抗控制的本质区别(附Simulink对比仿真)

本文深入解析机器人柔顺控制中的导纳控制与阻抗控制的本质区别,通过信号流方向、架构对比和应用场景三个关键视角进行详细阐述。文章还提供Simulink对比仿真案例,帮助读者快速理解两种控制策略的差异及其适用场景,特别适合机器人控制领域的研究者和工程师参考。

weixin_42543046的博客 604

学Simulink——线控转向(Steer‑By‑Wire, SBW)路感模拟与回正控制仿真

本文详细介绍了线控转向(SBW)系统的Simulink建模方法,重点讲解了路感模拟与回正控制的实现原理。文章首先分析了SBW系统结构,建立了方向盘和前轮的动力学方程;随后分步骤演示了Simulink建模过程,包括方向盘二阶动力学、前轮位置闭环控制、路感反馈计算等核心模块;最后通过仿真验证了转向跟随性能、路感反馈效果和自动回正功能。文中还提供了工程实现的关键参数和注意事项,为开发真实的SBW系统提供了实用指导。该模型可扩展应用于主动转向、故障注入等高级功能开发。

xiaoheshang_123的博客 39

android 自定义view 加载图片,Android自定义View基础开发之图片加载进度条

学会了Paint,Canvas的基本用法之后,我们就可以动手开始实践了,先写个简单的图片加载进度条看看。按照惯例,先看效果图,再决定要不要往下看:既然看到这里了,应该是想了解这个图片加载进度条了,我们先看具体用法,再看自定义View的实现:xmlns:custom="http://schemas.android.com/apk/res-auto"android:layout_width="matc...

weixin_39548606的博客 2596

DeepSeek 赋能太空探索:从轨道优化到星际开拓的 AI 革命

随着人工智能技术蓬勃发展,DeepSeek 在太空探索领域展现出巨大应用潜力。本文深入剖析 DeepSeek 技术核心,包括低功耗运算、开源生态等优势,阐述其与传统航天技术的差异。从航天器自主控制、深空探测、载人航天等关键环节,结合实时轨道调整、故障诊断修复等实例,揭示 DeepSeek 对航天任务效率与安全性的提升作用。同时探讨其应用面临的太空环境适应、伦理安全等挑战,展望技术演进方向及与前沿技术融合前景,展现 DeepSeek 为人类太空探索带来的变革与深远意义。

邓邓子的博客 2258

android imageview组件,android之ImageView组件和Gallery组件

1、ImageView组件和Gallery组件ImageView为图像视图,用于在屏幕中显示任何的Drawable对象。画廊视图用Gallery表示,能够按水平方向显示内容,并可以用手指直接拖动图片移动,一般用来浏览图片。2、定义布局管理器ImageView支持的XML属性XML属性描述android:adjustViewBounds用于设置ImageView是否调整自己的边界保持所显示图片的长宽...

weixin_34803466的博客 367

【数据同化第二期】数据同化中三大理论基础之一(最小方差估计)

【数据同化第二期】深入理解数据同化及经典案例(最小方差估计)

WW、forever的博客 1597

OV9734 DATASHEET,完整规格书

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

Android开发-Android常用组件-ImageView图像视图

4.4 ImageView(图像视图) ImageView见名知意,就是用来显示图像的一个View或者说控件 需掌握的知识点: ImageView的src属性和blackground的区别; adjustViewBounds设置图像缩放时是否按长宽比 scaleType设置缩放类型 最简单的绘制圆形的ImageView src属性和background属性的区别     在API文...

LYly_B的博客 592

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android-UI组件(三):ImageView及其子类

ImageView继承自View组件,它的主要功能是显示图片或者任何Drawable对象,下面是ImageView的类关系图: 由上图可以看出来,ImageView派生出ImageButton、ZoomButton等组件,因此ImageView支持的XML属性以及相关的方法也可以应用在ImageButton、ZoomButton上面。 下面是ImageView支持的XML属性以及相关方

Jeff Li 1450

深度学习工具包 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")

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android开发9:UI组件ImageView

版本:Android4.3 API18 学习整理:liuxinming 概述 ImageView继承自View组件,主要用于显示图片 任何Drawable对象都可使用ImageView来显示 从上面类图关系可以看出,ImageView派生了ImageButton、QuickContactBadge等组件 1、ImageButton:图片按钮       ImageButton派

巴途Way,专注Go,PHP,C开发 2558

Android 之 ImageView(图片组件)

[color=olive][size=small][b]ImageView 图片组件: 属性:android:src="" 引用图片资源 测试代码:[/b][/size][/color] [code="java"] [/code]

Sunzone 219

(九)Android中的ImageView组件

1. 引入 在日常生活中,我们使用的任何app肯定要包含图片,下面介绍两个,一个是本地的图片,另一个是使用第三方库,加载网络图片。 2.使用本地图片 通过引入ImageText组件,这里主要新属性为, android:scaleType=“fitXY” android:src="@drawable/imageview" 这两个属性,一个设置图片的路径,一个设置填充的方式,可以参照https://www.jianshu.com/p/32e335d5b842,这篇文章。而图片的路径,直接引入就好了,我们依然把图

老张的博客 878

安卓基础组件017--ImageView组件

安卓基础组件017--ImageView组件

DXH9701的博客 290

Android开发之ImageView文本组件的…

1,将我们的图片复制到res下边的drawable-hdpi文件夹下边 2,修改res下边的layout下边的xml文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     and

812

Android之组件ProgressBar、SeekBar、ImageView、tabHost总结

今天讲了四个组件:ProgressBar、SeekBar、ImageView、tabHost 1、  ProgressBar进度条      两种效果如图:                       android:layout_width="wrap_content"        android:layout_height="wrap_content"        />

任海丽(3G/移动开发) 2860

一步一步学android之基本控件——ImageView和ImageButton组件

今天要说的这两个组件比较简单,所以ImageButton和ImageView就放在这一篇文章中一起说了,首先说下ImageView,它的主要功能就是为图片展示提供一个容器,定义如下:  今天内容较少,例子就放在同一个文件中说,所以先说下ImageButton,与Button相似,在Android中还有一个就是imagebutton,他的定义如下: 可以看见,ImageButto

Kay的专栏 1973

Android基本组件——1.Button、ImageView等的按下效果

有关Button、ImageView、ImageButton、TextView等组件都可以设置它们的按下效果,有两种解决方案,一是在代码里面写,二是在xml中写,个人偏向于在xml写。 一:在xml中,可以用selector完成,例如: 一个Button平时状态:按下的状态: 在drawable中新建一个xml文件:shape_common_radiusbtn,控制背景色

Miss_Simple3的专栏 1780
上一篇: Android TextView 组件
下一篇: Android UI 之 SeekBar
KingLearnJava
博客等级 码龄12年 93粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值