关闭

利用ImageView和SeekBar动态缩放和旋转图片的Demo

标签: AndroidDisplayMetricsMatrix
661人阅读 评论(0) 收藏 举报
分类:
布局代码:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="${relativePackage}.${activityClass}" >


    <ImageView
        android:id="@+id/image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitCenter"
        android:src="@drawable/android_l" />


    <TextView
        android:id="@+id/textview1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp" />


    <SeekBar
        android:id="@+id/seekbar1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


    <TextView
        android:id="@+id/textview2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="旋转度数:0" />


    <SeekBar
        android:id="@+id/seekbar2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:max="360"/>


</LinearLayout>


结合屏幕与SeekBar获取缩放:DisplayMetrics mDisplayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics);
mSeekBar1.setMax(mDisplayMetrics.widthPixels - MIN_WIDTH);
改变seekbar的图片响应代码:if (seekBar.getId() == R.id.seekbar1)
{
int newwidth = progress + MIN_WIDTH;
int newheight = (int) (progress * 3 / 4);
mImageView.setLayoutParams(new LinearLayout.LayoutParams(newwidth, newheight));
mTextView1.setText(getResources().getString(R.string.image_width) + progress + " ");
} else if (seekBar.getId() == R.id.seekbar2)
{
Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.android_l)).getBitmap();
Matrix matrix = new Matrix();
matrix.setRotate(progress);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
mImageView.setImageBitmap(bitmap);
mTextView2.setText(getResources().getString(R.string.rotate) + progress);
}

总代码:package com.example.imageview;


import android.app.Activity;
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.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;


public class MainActivity extends Activity implements OnSeekBarChangeListener
{
private ImageView mImageView;
private TextView mTextView1, mTextView2;
private SeekBar mSeekBar1, mSeekBar2;
private final static int MIN_WIDTH = 200;


@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setControl();
setScreenMaxSeekBAr1();
SetonChangSeekBar();
}


public void setControl()
{
mImageView = (ImageView) findViewById(R.id.image_view);
mSeekBar1 = (SeekBar) findViewById(R.id.seekbar1);
mSeekBar2 = (SeekBar) findViewById(R.id.seekbar2);
mTextView1 = (TextView) findViewById(R.id.textview1);
mTextView2 = (TextView) findViewById(R.id.textview2);
}


public void SetonChangSeekBar()
{
mSeekBar1.setOnSeekBarChangeListener(this);
mSeekBar2.setOnSeekBarChangeListener(this);
}


private void setScreenMaxSeekBAr1()
{
DisplayMetrics mDisplayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics);
mSeekBar1.setMax(mDisplayMetrics.widthPixels - MIN_WIDTH);
}


@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
{
if (seekBar.getId() == R.id.seekbar1)
{
int newwidth = progress + MIN_WIDTH;
int newheight = (int) (progress * 3 / 4);
mImageView.setLayoutParams(new LinearLayout.LayoutParams(newwidth, newheight));
mTextView1.setText(getResources().getString(R.string.image_width) + progress + " ");
} else if (seekBar.getId() == R.id.seekbar2)
{
Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.android_l)).getBitmap();
Matrix matrix = new Matrix();
matrix.setRotate(progress);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
mImageView.setImageBitmap(bitmap);
mTextView2.setText(getResources().getString(R.string.rotate) + progress);
}


}


@Override
public void onStartTrackingTouch(SeekBar seekBar)
{
// TODO Auto-generated method stub


}


@Override
public void onStopTrackingTouch(SeekBar seekBar)
{
// TODO Auto-generated method stub


}


}只是自己的小程序。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

通过SeekBar对ImageView进行缩放,旋转

android:layout_width="fill_parent"     android:layout_height="fill_parent"     android:orientation...
  • u012937267
  • u012937267
  • 2015-08-15 13:18
  • 132

用SeekBar更改图片的大小,缩放及其旋转

这里有两个主要的类,Matrix 和 DisaplayMetrics Matrix 中文是矩阵的意思,用来实现图片的缩放,平移,旋转的。API里解释为:可以用这个类生成一个3 x 3 的一个矩阵,在...
  • u013556056
  • u013556056
  • 2014-03-21 19:38
  • 1291

通过SeekBar对ImageView进行缩放,旋转

android:layout_width="fill_parent"     android:layout_height="fill_parent"     android:orientation...
  • u012937267
  • u012937267
  • 2015-08-15 13:18
  • 132

android学习记录(二)-----imageView实现图片的旋转和缩放

感觉在代码中写出解析会比较好看,我直接在程序代码中解析所用的方法吧。 MainActivity: package com.example.imageview_demo03; import and...
  • zuolovefu
  • zuolovefu
  • 2014-11-12 18:13
  • 2090

Android 使用变形矩阵实现可以拖拽,缩放,旋转的图像

上篇博文介绍了变形矩阵的一些用法,所以这篇博文就结合变形矩阵来实现一个可以拖拽、缩放、旋转的图像吧。首先,我们就继承ImageView来实现我们的自定义View。
  • Luo_xinran
  • Luo_xinran
  • 2016-09-18 20:42
  • 2321

Android 可平移,缩放,旋转的ImageView

public class TouchImageView extends ImageView {          private static final String TAG = TouchIm...
  • yangxi_001
  • yangxi_001
  • 2014-08-11 17:26
  • 1226

Android之UI学习篇六:ImageView实现图片旋转和缩放

这一篇,给大家介绍一下ImageView控件的使用,ImageView主要是用来显示图片,可以对图片进行放大、缩小、旋转的功能。 android:sacleType属性指定ImageVIew控件显示...
  • wulianghuan
  • wulianghuan
  • 2013-02-17 20:15
  • 28545

自定义ImageView 实现双击放大缩小还原,无极缩小和旋转及拖动(多机型测试很稳定)

/** * 该模块主要实现了放大和原大两个级别的缩放。 功能有: 1.以触摸点为中心放大(这个是网上其他的代码没有的) 2.取消边界控制(这个是网上其他的代码没有的)也可以添加边界控制 3.双击放大...
  • gfg156196
  • gfg156196
  • 2015-11-09 17:19
  • 1452

Android单点触控技术,对图片进行平移,缩放,旋转操作

转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/42833893),请尊重他人的辛勤劳动成果,谢谢! ...
  • chengkaizone
  • chengkaizone
  • 2016-05-13 12:05
  • 842

SeekBar进度条背景图片和按钮图标的动态切换

代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1...
  • geyichongchujianghu
  • geyichongchujianghu
  • 2016-08-16 10:46
  • 1091
    个人资料
    • 访问:19929次
    • 积分:725
    • 等级:
    • 排名:千里之外
    • 原创:36篇
    • 转载:52篇
    • 译文:3篇
    • 评论:4条