Android ImageView以及实现截图

news2024/11/29 3:00:55

实现效果

截图前

在这里插入图片描述

截图后

在这里插入图片描述

代码

package cn.jj.huaweiad;

import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;

import androidx.appcompat.app.AppCompatActivity;

import cn.jj.sdkcomtools.utils.LogUtils;

public class ImageViewActivity extends AppCompatActivity {
    private static final String TAG = "JJWorld.ImageViewActivity";

    private ImageView imageViewTest;
    private Button fitXYBtn;
    private Button fitStartBtn;
    private Button fitCenterBtn;
    private Button fitEndBtn;
    private Button centerBtn;
    private Button centerCropBtn;
    private Button centerInsideBtn;
    private Button mfitXYBtn;
    private Button layout;
    private ViewGroup rootView;
    private ViewGroup rootView1;
    private LinearLayout mRootLayout;
    private ImageView captureImageView;
    private Button captureBtn;
    private Handler mHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_view);
        rootView = (ViewGroup) findViewById(android.R.id.content);
        initView();
        imageViewTest.setImageResource(R.drawable.tk_huawei_ad_splash_slogan_portait);
        printAllViewsInLayout((ViewGroup) findViewById(android.R.id.content), 0);
        mHandler = new Handler();
        rootView.setDrawingCacheEnabled(true);
    }

    @SuppressLint("LongLogTag")
    private void printAllViewsInLayout(ViewGroup layout, int level) {
        int childCount = layout.getChildCount();
        for (int i = 0; i < childCount; i++) {
            View childView = layout.getChildAt(i);
            Log.d(TAG, "View level:" + level + ", index " + i + ": " + childView.getClass().getSimpleName());

            // 如果子视图是ViewGroup,则递归地打印其子视图
            if (childView instanceof ViewGroup) {
                printAllViewsInLayout((ViewGroup) childView, level + 1);
            }
        }
    }

    private void initView() {
        imageViewTest = (ImageView) findViewById(R.id.image_view_test);
        fitXYBtn = (Button) findViewById(R.id.fitXY_btn);
        fitXYBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                imageViewTest.setScaleType(ImageView.ScaleType.FIT_XY);
            }
        });
        fitStartBtn = (Button) findViewById(R.id.fitStart_btn);
        fitStartBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                imageViewTest.setScaleType(ImageView.ScaleType.FIT_START);
            }
        });
        fitCenterBtn = (Button) findViewById(R.id.fitCenter_btn);
        fitCenterBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                imageViewTest.setScaleType(ImageView.ScaleType.FIT_CENTER);
            }
        });
        fitEndBtn = (Button) findViewById(R.id.fitEnd_btn);
        fitEndBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                imageViewTest.setScaleType(ImageView.ScaleType.FIT_END);
            }
        });
        centerBtn = (Button) findViewById(R.id.center_btn);
        centerBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                imageViewTest.setScaleType(ImageView.ScaleType.CENTER);
            }
        });
        centerCropBtn = (Button) findViewById(R.id.centerCrop_btn);
        centerCropBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                imageViewTest.setScaleType(ImageView.ScaleType.CENTER_CROP);
            }
        });
        centerInsideBtn = (Button) findViewById(R.id.centerInside_btn);
        centerInsideBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                imageViewTest.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
            }
        });
        layout = (Button) findViewById(R.id.layout);
        layout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                rootView.removeAllViews();
                LogUtils.logI(TAG,"---------------------------");
                FrameLayout newRootView = new FrameLayout(ImageViewActivity.this);
                setContentView(newRootView);
                printAllViewsInLayout((ViewGroup) findViewById(android.R.id.content), 0);
            }
        });
        mRootLayout = (LinearLayout) findViewById(R.id.m_root_layout);
        captureImageView = (ImageView) findViewById(R.id.capture_image_view);
        captureBtn = (Button) findViewById(R.id.capture_btn);
        captureBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Bitmap bitmap = rootView.getDrawingCache();
                captureImageView.setImageBitmap(bitmap);
                mHandler.postDelayed(mRunnable,200);
            }
        });
    }

    private Runnable mRunnable = new Runnable(){

        @Override
        public void run() {
            rootView.setDrawingCacheEnabled(false);
            rootView.setDrawingCacheEnabled(true);
        }
    };
}

xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/m_root_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/image_view_test"
        android:layout_width="match_parent"
        android:layout_height="300dp" />

    <ImageView
        android:id="@+id/capture_image_view"
        android:layout_width="match_parent"
        android:layout_height="200dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/fitXY_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="fitXY" />

        <Button
            android:id="@+id/fitStart_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="fitStart" />

        <Button
            android:id="@+id/fitCenter_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="fitCenter" />

        <Button
            android:id="@+id/fitEnd_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="fitEnd" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/center_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="center" />

        <Button
            android:id="@+id/centerCrop_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="centerCrop" />

        <Button
            android:id="@+id/centerInside_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="centerInside" />



    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="layout" />

        <Button
            android:id="@+id/capture_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="截图" />
    </LinearLayout>
</LinearLayout>

日志

应用启动,点击layout日志如下:

2024-03-28 20:54:08.051  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       D  View level:0, index 0: LinearLayout
2024-03-28 20:54:08.051  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       D  View level:1, index 0: AppCompatImageView
2024-03-28 20:54:08.051  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       D  View level:1, index 1: AppCompatImageView
2024-03-28 20:54:08.051  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       D  View level:1, index 2: LinearLayout
2024-03-28 20:54:08.051  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       D  View level:2, index 0: MaterialButton
2024-03-28 20:54:08.051  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       D  View level:2, index 1: MaterialButton
2024-03-28 20:54:08.051  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       D  View level:2, index 2: MaterialButton
2024-03-28 20:54:08.051  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       D  View level:2, index 3: MaterialButton
2024-03-28 20:54:08.052  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       D  View level:1, index 3: LinearLayout
2024-03-28 20:54:08.052  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       D  View level:2, index 0: MaterialButton
2024-03-28 20:54:08.052  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       D  View level:2, index 1: MaterialButton
2024-03-28 20:54:08.052  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       D  View level:2, index 2: MaterialButton
2024-03-28 20:54:08.052  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       D  View level:1, index 4: LinearLayout
2024-03-28 20:54:08.052  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       D  View level:2, index 0: MaterialButton
2024-03-28 20:54:08.052  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       D  View level:2, index 1: MaterialButton
2024-03-28 20:54:14.092  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       I  ---------------------------
2024-03-28 20:54:14.093  3772-3772  JJWorld.Im...ewActivity cn.jj.huaweiad                       D  View level:0, index 0: FrameLayout

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1560173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【运维】Elsatic Search学习笔记

基本使用 Elasticsearch(简称ES): 是一个开源的高扩展的分布式全文搜索引擎 Docker安装Elasticsearch1 version: "3.1" services:elasticsearch:image: elasticsearch:7.13.3container_name: elasticsearchprivileged: trueenvironment:- "cluster.nameelast…

HTTP 常见面试题(计算机网络)

HTTP 基本概念 一、HTTP 是什么&#xff1f; HTTP(HyperText Transfer Protocol) &#xff1a;超文本传输协议。 HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。 「HTTP 是用于从互联网服务器传输超文本到本…

【4】单链表(有虚拟头节点)

【4】单链表&#xff08;有虚拟头节点&#xff09; 1、虚拟头节点2、构造方法3、node(int index) 返回索引位置的节点4、添加5、删除6、ArrayList 复杂度分析(1) 复杂度分析(2) 数组的随机访问(3) 动态数组 add(E element) 复杂度分析(4) 动态数组的缩容(5) 复杂度震荡 7、单链…

uniapp 小程序发布体验版 http://198.18.0.1:7001 不在以下 request 合法域名列表中(踩坑记录二)

问题一&#xff1a; 小程序发布体验版时出现报错信息&#xff1a; http://198.18.0.1:7001 不在以下 request 合法域名列表中无法连接uniCloud本地调试服务&#xff0c;请检查当前客户端是否与主机在同一局域网下 解决方案&#xff1a; 请务必在HBuilderX内使用【发行】菜单打…

Vastbase编程利器:PL/pgSQL原理简介

PL/pgSQL是Vastbase提供的一种过程语言&#xff0c;在普通SQL语句的使用上增加了编程语言的特点&#xff0c;可以用于创建函数、存储过程、触发器过程以及创建匿名块等。 本文介绍Vastbase中PL/pgSQL的执行流程&#xff0c;包括PL/pgSQL的编译与运行。 1、编译 PL/pgSQL的编译…

什么是HTTP? HTTP 和 HTTPS 的区别?

文章目录 一、HTTP二、HTTPS三、区别参考文献 一、HTTP HTTP (HyperText Transfer Protocol)&#xff0c;即超文本运输协议&#xff0c;是实现网络通信的一种规范 在计算机和网络世界有&#xff0c;存在不同的协议&#xff0c;如广播协议、寻址协议、路由协议等等… 而HTTP是…

CleanMyMac X2024专业的Mac清理工,具一次激活,永久使用

CleanMyMac&#xff0c;作为一款专为Mac系统设计的垃圾清理工具&#xff0c;以其强大的清理能力、简便的操作方式以及卓越的系统兼容性&#xff0c;受到了众多Mac用户的青睐。以下是对这款软件功能的详细介绍&#xff1a; CleanMyMac X2024全新版下载如下: https://wm.makedin…

机器人---人形机器人之技术方向

1 背景介绍 在前面的文章《行业杂谈---人形机器人的未来》中&#xff0c;笔者初步介绍了人形机器人的未来发展趋势。同智能汽车一样&#xff0c;它也会是未来机器人领域的一个重要分支。目前地球上最高智慧的结晶体就是人类&#xff0c;那么人形机器人的未来会有非常大的发展空…

Qt笔记-解决Qt程序连不上数据库MySQL数据库(重编libqsqlmysql.so)

使用QSqlDatabase连接MySQL数据库时。在自己程序配置没有错误的情况下报这类错误&#xff1a; QSqlDatabase: QMYSQL driver not loaded QSqlDatabase::exec: database not open 造成这样的问题大多数是libqsqlmysql.so有问题。 Qt的QSqlDatabase使用的是libqsqlmysql.so&a…

【GitLab】开启GitLab 的邮箱通知服务

为了GitLab使用更方便&#xff0c;让用户及时收到推送代码、修改密码等相关的通知&#xff0c;可以开启邮箱推送&#xff0c;下面是两种邮箱的配置方法。 使用系统Postfix 邮箱 如果要使用 Postfix 来发送电子邮件通知&#xff0c;执行以下安装命令。 sudo apt-get install …

图的存储及基本操作试题

01&#xff0e;下列关于图的存储结构的说法中&#xff0c;错误的是&#xff08;). A.使用邻接矩阵存储一个图时&#xff0c;在不考虑压缩存储的情况下&#xff0c;所占用的存储空间大小 只与图中的顶点数有关&#xff0c;与边数无关 B&#xff0e;邻接表只用于有向图的存储&…

打造高效安全的电池管理 | 基于ACM32 MCU的两轮车充电桩方案

前 言 随着城市化进程的加快、人们生活水平的提高和节能环保理念的普及&#xff0c;越来越多的人选择了电动车作为代步工具&#xff0c;而两轮电动车的出行半径较短&#xff0c;需要频繁充电&#xff0c;因此在城市中设置两轮车充电桩就非常有必要了。城市中的充电桩不仅能解决…

学习transformer模型-Dropout的简明介绍

Dropout的定义和目的&#xff1a; Dropout 是一种神经网络正则化技术&#xff0c;它在训练时以指定的概率丢弃一个单元&#xff08;以及连接&#xff09;p。 这个想法是为了防止神经网络变得过于依赖特定连接的共同适应&#xff0c;因为这可能是过度拟合的症状。直观上&#…

AcWing-乌龟棋

312. 乌龟棋 - AcWing题库 所需知识&#xff1a;动态规划 闫氏dp分析法&#xff1a; 整体思路&#xff1a;由于走的方式有四种&#xff0c;所以dp[i][j][m][n]的来源有四种&#xff0c;状态转移方程式要求不重不漏&#xff0c;所以我们可以以使用的最后一个卡片上的数值来进行…

三台电机的顺启逆停

1&#xff0c;开启按钮输入信号是 电机一开始启动&#xff0c;5秒回电机2启动 &#xff0c;在5秒电机三启动 关闭按钮输入时电机3关闭 &#xff0c;5秒后电机2关闭 最后电机一关闭 2&#xff0c;思路开启按钮按下接通电机1 并且接通定时器T0 定时器T0 到时候接通电机2 并且开…

快速创建zookeeper集群

先说明&#xff0c;zookeeper集群的3个节点都放在同一个虚拟机&#xff08;穷&#xff09;&#xff0c;所以搭建是一个伪集群&#xff0c;因为一个服务器挂机&#xff0c;所有节点都会停止。工作实际情况安装到三个服务器&#xff0c;并修改节点配置的ip地址即可&#xff08;红…

星云曲库测试报告

文章目录 一、项目介绍1.1项目背景1.2功能介绍 二、测试环境三、测试执行过程3.1功能测试3.1.1登录页面测试3.1.2歌曲列表页面测试3.1.3“我喜欢”页面测试3.1.4上传页面测试 3.2界面自动化测试3.2.1登录页面测试3.2.2歌曲列表页面测试3.2.3“我喜欢”页面测试3.2.4上传页面测试…

零失误微信支付商家转账到零钱功能开通教程

商家转账到零钱是什么&#xff1f; 使用商家转账到零钱这个功能&#xff0c;可以让商户同时向多个用户的零钱转账。商户可以使用这个功能用于费用报销、员工福利发放、合作伙伴货款或分销返佣等场景&#xff0c;提高效率。 商家转账到零钱的使用场景有哪些&#xff1f; 商家…

都江堰操作系统系统架构图

都江堰操作系统设计思想源于中国传统的“天人合一&#xff0c;道法自然”哲学思想&#xff0c;内核调度系统采用事件调度&#xff0c;全球首创&#xff0c;突破单机桎梏&#xff0c;实现异构网络调度&#xff0c;开拓新赛道&#xff0c;实现换道超车。“有事就动&#xff0c;没…

Vue.js前端开发零基础教学(四)

学习目标&#xff1a; 熟悉选项式API和组合式API&#xff0c;能够说出选项式API和组合式API的区别 掌握注册组件的方法&#xff0c;能够运用全局注册或者局部注册的方式完成组件的注册 掌握父组件向子组件传递数据的方法&#xff0c;能够使用props实现数据传递等等 前言 在学习…