📜  Android 中的 ImageView ScaleType 示例

📅  最后修改于: 2022-05-13 01:55:24.657000             🧑  作者: Mango

Android 中的 ImageView ScaleType 示例

ScaleType 用于将图像边界统一缩放到 ImageView。 Android ImageView 为不同的配置提供了各种类型的 ScaleType。

  • 中央
  • CENTER_CROP
  • CENTER_INSIDE
  • FIT_CENTER
  • FIT_END
  • FIT_START
  • FIT_XY
  • 矩阵

现在,我们将详细了解这些 ScaleType。为了探索这些比例类型,我们将使用 GeeksforGeeks 徽标作为我们的图像资源,并将 ImageView 的背景颜色设置为黑色以供参考。

1. 中心

这种比例类型将使图像在视图内居中。但是,它不会对图像执行任何缩放。下面是 CENTER 比例类型的代码。

XML


XML


XML


XML


XML


XML


XML


XML


XML

    #0F9D58
    #16E37F
    #03DAC5


XML


  
    
  
    
  
        


Java
import androidx.appcompat.app.AppCompatActivity;
  
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
  
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  
    private ImageView img;
    private Button center, center_crop, center_inside, fit_center, fit_end, fit_start, fit_xy, matrix;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // Initializing method..
        init();
    }
  
    private void init(){
  
        img = findViewById(R.id.st_image);
  
        center = findViewById(R.id.st_center);
        center.setOnClickListener((View.OnClickListener) this);
  
        center_crop = findViewById(R.id.st_center_crop);
        center_crop.setOnClickListener((View.OnClickListener) this);
  
        center_inside = findViewById(R.id.st_center_inside);
        center_inside.setOnClickListener((View.OnClickListener) this);
  
        fit_center = findViewById(R.id.st_fit_center);
        fit_center.setOnClickListener((View.OnClickListener) this);
  
        fit_end = findViewById(R.id.st_fit_end);
        fit_end.setOnClickListener((View.OnClickListener) this);
  
        fit_start = findViewById(R.id.st_fit_start);
        fit_start.setOnClickListener((View.OnClickListener) this);
  
        fit_xy = findViewById(R.id.st_fit_xy);
        fit_xy.setOnClickListener((View.OnClickListener) this);
  
        matrix = findViewById(R.id.st_matrix);
        matrix.setOnClickListener((View.OnClickListener) this);
    }
  
    public void onClick(View view){
        switch (view.getId()){
            case R.id.st_center:
                img.setScaleType(ImageView.ScaleType.CENTER);
                Toast.makeText(this, "SCALE TYPE - CENTER", Toast.LENGTH_SHORT).show();
                break;
  
            case R.id.st_center_crop:
                img.setScaleType(ImageView.ScaleType.CENTER_CROP);
                Toast.makeText(this, "SCALE TYPE - CENTER_CROP", Toast.LENGTH_SHORT).show();
                break;
            case R.id.st_center_inside:
                img.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
                Toast.makeText(this, "SCALE TYPE - CENTER_INSIDE", Toast.LENGTH_SHORT).show();
                break;
            case R.id.st_fit_center:
                img.setScaleType(ImageView.ScaleType.FIT_CENTER);
                Toast.makeText(this, "SCALE TYPE - FIT_CENTER", Toast.LENGTH_SHORT).show();
                break;
            case R.id.st_fit_end:
                img.setScaleType(ImageView.ScaleType.FIT_END);
                Toast.makeText(this, "SCALE TYPE - FIT_END", Toast.LENGTH_SHORT).show();
                break;
            case R.id.st_fit_start:
                img.setScaleType(ImageView.ScaleType.FIT_START);
                Toast.makeText(this, "SCALE TYPE - FIT_START", Toast.LENGTH_SHORT).show();
                break;
            case R.id.st_fit_xy:
                img.setScaleType(ImageView.ScaleType.FIT_XY);
                Toast.makeText(this, "SCALE TYPE - FIT_XY", Toast.LENGTH_SHORT).show();
                break;
            case R.id.st_matrix:
                img.setScaleType(ImageView.ScaleType.MATRIX);
                Toast.makeText(this, "SCALE TYPE - MATRIX", Toast.LENGTH_SHORT).show();
                break;
        }
    }
  
}


中央

2. CENTER_CROP

这种缩放类型统一缩放图像。即,保持图像的纵横比,以使尺寸(宽度和高度)等于或大于ImageView 尺寸。

XML


CENTER_CROP

3. CENTER_INSIDE

CENTER_INSIDE 将 ImageView 容器内的图像居中。此比例类型与图像边缘与视图边缘不匹配。

XML


CENTER_INSIDE

4. FIT_CENTER

它将从中心缩放图像。 FIT_CENTER 确保图像完全适合 ImageView 并且图像的垂直或水平轴将与视图完全相同。

XML


FIT_CENTER

5. FIT_END

它用于将图像文件缩放到视图(ImageView)的末尾。这种缩放类型从容器的末端缩放图像

XML


FIT_END

6. FIT_START

这用于将图像缩放到容器的开头。 FIT_START从容器开始缩放图像

XML


FIT_START

7. FIT_XY

FIT_XY 使用填充属性完成缩放。它将从 ImageView 的 X 和 Y 坐标填充图像。

XML


FIT_XY

8.矩阵

它用于在绘图时使用图像矩阵对图像进行缩放。建议在您想要自定义旋转图像或缩放图像等方式时使用。

XML


矩阵

例子

在本例中,我们将使用按钮的单击事件监听器上的各种缩放类型属性进行缩放,并显示具有各种缩放类型的图像,并为缩放类型的名称发送消息。

第 1 步:创建一个新项目

要在 Android Studio 中创建新项目,请参阅如何在 Android Studio 中创建/启动新项目。请注意,选择Java作为编程语言。

第 2 步:添加资源

在继续之前,我们将在我们的 colors.xml 资源文件中添加以下颜色属性。转到res > values > colors.xml并添加它们。

XML


    #0F9D58
    #16E37F
    #03DAC5

第三步:创建布局文件

在这一步中,我们将为我们的应用程序创建布局。为此,我们使用了各种比例类型的按钮。下面是activity_main.xml文件的代码。

XML



  
    
  
    
  
        

第 4 步:使用 MainActivity。Java

在这一步中,我们将初始化我们的 ImageView 和 Button 并为它们附加一个监听器。侦听器事件完成后,将显示一条关于秤类型名称的 toast 消息。我们还可以使用Java代码设置比例类型。下面是MainActivity 的代码。 Java文件。

Java

import androidx.appcompat.app.AppCompatActivity;
  
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
  
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  
    private ImageView img;
    private Button center, center_crop, center_inside, fit_center, fit_end, fit_start, fit_xy, matrix;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // Initializing method..
        init();
    }
  
    private void init(){
  
        img = findViewById(R.id.st_image);
  
        center = findViewById(R.id.st_center);
        center.setOnClickListener((View.OnClickListener) this);
  
        center_crop = findViewById(R.id.st_center_crop);
        center_crop.setOnClickListener((View.OnClickListener) this);
  
        center_inside = findViewById(R.id.st_center_inside);
        center_inside.setOnClickListener((View.OnClickListener) this);
  
        fit_center = findViewById(R.id.st_fit_center);
        fit_center.setOnClickListener((View.OnClickListener) this);
  
        fit_end = findViewById(R.id.st_fit_end);
        fit_end.setOnClickListener((View.OnClickListener) this);
  
        fit_start = findViewById(R.id.st_fit_start);
        fit_start.setOnClickListener((View.OnClickListener) this);
  
        fit_xy = findViewById(R.id.st_fit_xy);
        fit_xy.setOnClickListener((View.OnClickListener) this);
  
        matrix = findViewById(R.id.st_matrix);
        matrix.setOnClickListener((View.OnClickListener) this);
    }
  
    public void onClick(View view){
        switch (view.getId()){
            case R.id.st_center:
                img.setScaleType(ImageView.ScaleType.CENTER);
                Toast.makeText(this, "SCALE TYPE - CENTER", Toast.LENGTH_SHORT).show();
                break;
  
            case R.id.st_center_crop:
                img.setScaleType(ImageView.ScaleType.CENTER_CROP);
                Toast.makeText(this, "SCALE TYPE - CENTER_CROP", Toast.LENGTH_SHORT).show();
                break;
            case R.id.st_center_inside:
                img.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
                Toast.makeText(this, "SCALE TYPE - CENTER_INSIDE", Toast.LENGTH_SHORT).show();
                break;
            case R.id.st_fit_center:
                img.setScaleType(ImageView.ScaleType.FIT_CENTER);
                Toast.makeText(this, "SCALE TYPE - FIT_CENTER", Toast.LENGTH_SHORT).show();
                break;
            case R.id.st_fit_end:
                img.setScaleType(ImageView.ScaleType.FIT_END);
                Toast.makeText(this, "SCALE TYPE - FIT_END", Toast.LENGTH_SHORT).show();
                break;
            case R.id.st_fit_start:
                img.setScaleType(ImageView.ScaleType.FIT_START);
                Toast.makeText(this, "SCALE TYPE - FIT_START", Toast.LENGTH_SHORT).show();
                break;
            case R.id.st_fit_xy:
                img.setScaleType(ImageView.ScaleType.FIT_XY);
                Toast.makeText(this, "SCALE TYPE - FIT_XY", Toast.LENGTH_SHORT).show();
                break;
            case R.id.st_matrix:
                img.setScaleType(ImageView.ScaleType.MATRIX);
                Toast.makeText(this, "SCALE TYPE - MATRIX", Toast.LENGTH_SHORT).show();
                break;
        }
    }
  
}

输出: