需求为,让图片适配屏幕大小,并且可以用一个滑块来控制图片的旋转,用一个滑块来控制图片大小,核心语法思路,控制图片的大小,

核心语法为:mImageView.setLayoutParams(new LinearLayout.LayoutParams(newWidth,newHeight));
这句代码意思是,重新适配屏幕宽高,但是宽高是计算生成的,间接完成适配。适配方法如下:

但是这儿二个属性要提前配置,要求图片大不能超出屏幕,所以先计算屏幕大小,
private void setMaxValueForSeekBar1(){
DisplayMetrics dmDisplayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dmDisplayMetrics);
mSeekBar1.setMax(dmDisplayMetrics.widthPixels - MIN_WIDTH);
}
//这儿先配置滑块的最大数值
图片旋转的配置核心代码为:
Bitmap bitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.test1)).getBitmap();
Matrix matrix = new Matrix();
matrix.setRotate(i);
bitmap = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(), bitmap.getHeight(),matrix,true);
mImageView.setImageBitmap(bitmap);


 完整代码如下:

第一配置 values 文件  string.xml文件如下

<resources>
<string name="app_name">My Application1</string>
<string name="image_width">图像宽度</string>
<string name="image_height">图像高度</string>
<string name="image_rotate">旋转度数</string>
<string name="init_rotate">初始角度</string>
</resources>

  

第二静态布局文件如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"> <ImageView
android:id="@+id/img"
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:src="@drawable/test1"/> <TextView
android:id="@+id/content1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:layout_marginTop="10dp"
/> <SeekBar
android:id="@+id/sekkbar1"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> <TextView
android:id="@+id/content2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/init_rotate"
/>
<SeekBar
android:id="@+id/sekkbar2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="360"/>
</LinearLayout>

  

第三逻辑代码如下

package com.example.myapplication1;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView; public class MainActivity extends AppCompatActivity implements SeekBar.OnSeekBarChangeListener {
private final static int MIN_WIDTH = 200;
private ImageView mImageView;
private TextView mTextView1;
private SeekBar mSeekBar1;
private TextView mTextView2;
private SeekBar mSeekBar2; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewByid();
setListners();
setMaxValueForSeekBar1();
}
private void findViewByid(){
mImageView = findViewById(R.id.img);
mTextView1 = findViewById(R.id.content1);
mTextView2 = findViewById(R.id.content2);
mSeekBar1 = findViewById(R.id.sekkbar1);
mSeekBar2 = findViewById(R.id.sekkbar2);
}
private void setListners(){
mSeekBar1.setOnSeekBarChangeListener(this);
mSeekBar2.setOnSeekBarChangeListener(this);
}
private void setMaxValueForSeekBar1(){
DisplayMetrics dmDisplayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dmDisplayMetrics);
mSeekBar1.setMax(dmDisplayMetrics.widthPixels - MIN_WIDTH);
} @Override
// 当滑块被拖动时会执行以下代码
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
if(seekBar.getId() == R.id.sekkbar1){
int newWidth = i + MIN_WIDTH;
int newHeight = (int)(newWidth*3/4);
mImageView.setLayoutParams(new LinearLayout.LayoutParams(newWidth,newHeight));
mTextView1.setText(getResources().getString(R.string.image_width) +
newWidth+getResources().getString(R.string.image_height)+newHeight );
}else if(seekBar.getId() == R.id.sekkbar2){
Bitmap bitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.test1)).getBitmap();
Matrix matrix = new Matrix();
matrix.setRotate(i);
bitmap = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(), bitmap.getHeight(),matrix,true);
mImageView.setImageBitmap(bitmap);
mTextView2.setText(getResources().getString(R.string.image_rotate)+i); }
} @Override
public void onStartTrackingTouch(SeekBar seekBar) { } @Override
public void onStopTrackingTouch(SeekBar seekBar) { }
}

  

第四屏幕截图,文件结构截图

 

图片动态操作,利用SeekBar控制属性示例,适配屏幕解决方案的更多相关文章

  1. jQuery .attr()和.removeAttr()方法操作元素属性示例

    今天主要和大家一起分享一下如何使用jQuery的.attr()和.removeAttr()方法读取,添加,修改,删除元素的属性.大家在平时的Web页面制作中都有碰到如何动态的获取元素的属性和属性值,或 ...

  2. .net学习笔记----利用System.Drawing.Image类进行图片相关操作

    C#中对图片的操作主要是通过System.Drawing.Image等类进行. 一.将图片转换为字节流 /// <summary> /// 图片处理帮助类 /// </summary ...

  3. 基于Metronic的Bootstrap开发框架经验总结(17)-- 使用 summernote插件实现HTML文档的编辑和图片插入操作

    在很多场合,我们需要在线编辑HTML内容,然后在页面上或者其他终端上(如小程序.APP应用等)显示,编辑HTML内容的插件有很多,本篇介绍基于Bootstrap的 summernote插件实现HTML ...

  4. javascript里面的数组,json对象,动态添加,修改,删除示例

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  5. !!!css如何让img图片居中?css的display属性实现图片居中(代码实例)

    在我们开发前端页面的时候,为了让页面效果美观,会让图片呈现居中效果.那么css怎么让img图片居中显示呢?本篇文章给大家带来css如何让img图片居中?css的display属性实现图片居中(代码实例 ...

  6. [Java-基础]反射_Class对象_动态操作

    动态性 动态语言 在程序运行时,可以改变程序结构或变量类型,典型的语言: Python,ruby,javascript 如: function test(){ var s = "var a= ...

  7. IE7中使用Jquery动态操作name问题

    问题:IE7中无法使用Jquery动态操作页面元素的name属性. 在项目中有出现问题,某些客户的机器偶尔会有,后台取不到前台的数据值. 然开发和测试环境总是不能重现问题.坑爹之处就在于此,不能重现就 ...

  8. MyBatis的getMapper()接口、resultMap标签、Alias别名、 尽量提取sql列、动态操作

    一.getMapper()接口 解析:getMapper()接口 IDept.class定义一个接口, 挂载一个没有实现的方法,特殊之处,借楼任何方法,必须和小配置中id属性是一致的 通过代理:生成接 ...

  9. javacpp-opencv图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印

    欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置. ...

  10. Asp.Net Core 2.0 项目实战(11) 基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级

    1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...

随机推荐

  1. 8.1 Windows驱动开发:内核文件读写系列函数

    在应用层下的文件操作只需要调用微软应用层下的API函数及C库标准函数即可,而如果在内核中读写文件则应用层的API显然是无法被使用的,内核层需要使用内核专有API,某些应用层下的API只需要增加Zw开头 ...

  2. Postfix + Extmail 企业邮件服务器搭建

    ExtMail套件用于提供从浏览器中登录.使用邮件系统的Web操作界面,而Extman套件用于提供从浏览器中管理邮件系统的Web操作界面.它以GPL版权释出,设计初衷是希望设计一个适应当前高速发展的I ...

  3. 基于.NET实现Matlab备用方案

    基于.NET实现Matlab备用方案 今日圈内的朋友都在刷这样的消息: 正值哈工大百年校庆之际,哈工大.哈工程的师生收到了MATLAB软件停止服务的邮件,在与 MATLAB 开发公司 MathWork ...

  4. 【算法】C语言程序编程模拟实现strlen函数和strcpy函数

    C语言程序编程模拟实现strlen函数和strcpy函数(超详细的注释和解释) 求个赞求个赞求个赞求个赞 谢谢 先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点赞和支持对于我来说 ...

  5. 面向对象之trait

    面向对象之trait 场景 一个web站点,它有很多不同的类:用户(User).页面(Page).联系表单(ContactFrom)等.我们可能需要在每个类中添加一个方法的定义,但是这样的话就会造成不 ...

  6. P7907 [Ynoi2005] rmscne题解

    题目链接:rmscne 神仙经典数据结构难题.看到求区间种类数有关的东西,需要下意识的反应到经典老题 HH的项链,这里可以学习我这篇 题解.具体学习下扫描线怎么做这类东西的. 看看本题,首先处理区间查 ...

  7. 图(树)的广度优先遍历bfs

    图的广度优先遍历 广度优先遍历,就是在遍历时优先考虑遍历的广度,不像深度优先那样一条路径遍历到底,而是一层一层的遍历. 由于广度优先是一层一层节点的遍历,在图的边权值都为1的情况下,若我们要求出节点a ...

  8. Linux使用wget命令下载网络资源

    之前接触的Linux环境大多是内网,一般都是采用传统的FTP服务器统一存放常用资源,有人需要时从FTP直接下载,若公司FTP没有想要的资源,还需联系管理维护人员下载上传对应的介质. 而目前随着云ECS ...

  9. 18. 默认堆/创建堆--《Windows核心编程》

    Windows 提供了以下三种机制来对内存进行操控虚拟内存:最适合用来管理大量对象数组或者大型数据结构内存映射文件:最适合用来管理大型数据流(通常是文件),以及在同一机器上运行的多个进程之间的共享数据 ...

  10. .NET Avalonia开源、免费的桌面UI库 - SukiUI

    前言 今天分享一款.NET Avalonia基于MIT License协议开源.免费的桌面UI库:SukiUI. Avalonia介绍 Avalonia是一个强大的框架,使开发人员能够使用.NET创建 ...