首页 > 其他分享 >安卓开发图片动态操作,利用SeekBar控制属性示例

安卓开发图片动态操作,利用SeekBar控制属性示例

时间:2023-10-08 23:22:36浏览次数:45  
标签:示例 SeekBar 安卓 private bitmap import android void

屏幕大小适配演示,综合练习。

功能为,用一个滑块来控制图片的旋转,用一个滑块来控制图片大小,核心语法思路,控制图片的大小,

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,安卓,private,bitmap,import,android,void
From: https://www.cnblogs.com/fgxwan/p/17750467.html

相关文章

  • MT6771安卓核心板-MTK6771核心板性能参数_联发科4G模组
    MT6771安卓核心板是一款基于MTK平台的高性能智能模块,运行Android10.0操作系统,该模块具备强大的处理能力和完善的通信功能。核心处理器采用ARM架构,包括4个Cortex-A73核心和4个Cortex-A53核心,主频高达2.0GHz,能够为智能设备提供出色的计算支持。MTK6771核心板可提供定制化的开发......
  • java开发浏览器(含代码示例)
    Java开发浏览器的步骤如下:创建一个Java类,它将实现浏览器的功能。Java开发浏览器的步骤如下:1.创建一个Java类,它将实现浏览器的功能。2.使用JavaSwing框架来创建浏览器的界面,包括菜单栏、工具栏、地址栏和显示网页的窗口。3.使用Java的URL类来处理网址,并使用Java的HttpURLConnect......
  • Python入门示例系列10 字符串(初级)
     字符串(string)Python中的字符串用单引号'或双引号"括起来,同时使用反斜杠\转义特殊字符。'ABC' 与"ABC"完全等价。示例:s1="hello"#双引号"括起来s2='hello'#单引号'括起来s3=''#空字符串s4=""#空字符串s5='''......
  • Python入门示例系列07 Python注释
     Python中的注释有单行注释(linecomment)和多行注释(paragraphcomment,blockcomment):Python中单行注释以#(hash,pound)开头,例如:#这是一个单行注释acommentlineprint("Hello!")#这是一个单行注释acommentline示例:#thisisthefirstcommentspam=1#andthisist......
  • Python入门示例系列06 使用PyCharm单步调试
    摘要: 使用PyCharm单步调试视频演示(0分52秒)启动PyCharm#新建Project#输入项目位置#注意:选定解释器新建py文件输入文件名,按回车输入代码a=1b=2c=3print("helloworld")左侧点击设置断点调试(代码区域,右键,调试)查看Variable结果 系列目录Python入门示例系列0......
  • Python入门示例系列05 使用PyCharm
     摘要: 使用PyCharm视频演示(1分35秒) 启动PyCharm新建Project【File菜单--NewProject】输入项目位置【即保存项目文件,代码文件的位置】注意:选定解释器【如果安装了多个Python,要选择合适的编译器,Python.exe文件】新建py文件【File菜单--New--Pythonfile】输......
  • Python入门示例系列04 使用 IDLE Shell
    启动IDLEShell安装Python之后,点击开始菜单,找到P开头的菜单项,点开某个版本的Python,如下图:  点击IDLE    输入代码之后按回车Enter可以运行代码【上图,输入x=1+2,然后按回车,即开始执行】输入变量(对象)名可以查看值【上图,输入x,可以查看x的值】Alt+P上一条代码(st......
  • Python入门示例系列03 安装Python开发工具
    视频:https://www.bilibili.com/video/BV1yZ4y1f7so?spm_id_from=333.999.0.0 Python常用的IDE有:IDLE(python自带,推荐安装Python),PyCharm(推荐安装),WingIDE,JupyterNotebook(推荐安装Anaconda3),其中 IDLE,PyCharm,WingIDE是专为Python语言使用的IDE。 下载Python Python3.6......
  • Python入门示例系列02 Python 语言的特点
    Python语言的特点视频:https://www.bilibili.com/video/BV1JF411p7k8?spm_id_from=333.999.0.0优点:简单易学--阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。Python容易上手。Python有极其简单的语法。注:面向对象的语法与......
  • SpringBoot简易任务栏示例
    一、概述现有这样一个需求:前端要求实现类似任务栏的东西(windows电脑的任务栏)。要求:可以向任务栏增加图标、删除图标、给任务栏中的图标排序以及加载任务栏图标列表参考样例图:规律图: 思路:(这里假设任务栏图标列表本身就是一个有序的集合,排序规则按照sort正向排序)......