• Android雁翎刀之ImageView之舞动乾坤


    传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229


    雁翎刀

            《白马啸西风》一强盗:虬髯大汉挥动手中雁翎刀,喝道:“李三,你当真是个硬汉!”呼的一刀向他头顶砍落。

            今天我们学习如何利用Android平台“雁翎刀”ImageView来实现图片旋转功能。像市面上的一些比较出名的图像编辑软件ACDSee、3DMAX、PhotoShop都提供了旋转图像的功能。下面给出该情景的案例:

    1案例技术要点

    (1)使用DisplayMetrics对象的widthPixels属性获取屏幕宽度。
    (2)使用SeekBar来操作图像旋转,并监听滑竿值的变化。
    (3)使用Matrix类的相关方法实现图片旋转。

    2案例代码陈列

    工程包目录


    AndroidManifest.xml

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.android.imageview"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="15" />
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:name=".ImageViewMainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
     
    </manifest> 

    strings.xml

    <resources>
        <string name="app_name">ImageView旋转图片</string>
    </resources>

    main.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         android:orientation="vertical">
    
         <ImageView 
             android:id="@+id/imageView"
             android:layout_width="200dp"
             android:layout_height="150dp"
             android:scaleType="fitCenter"
             android:src="@drawable/background"/>
         <TextView
             android:id="@+id/textView1"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_marginTop="10dp"
             android:text="240 * 160"/>
         <SeekBar 
             android:id="@+id/seekBar1"
             android:layout_width="200dp"
             android:layout_height="wrap_content"
             android:layout_marginTop="10dp"
             android:max="240"
             android:progress="120"/>
         <TextView
             android:id="@+id/textView2"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_marginTop="10dp"
             android:text="0 degree"/>
         <SeekBar 
             android:id="@+id/seekBar2"
             android:layout_width="200dp"
             android:layout_height="wrap_content"
             android:max="360"/>
    
    </LinearLayout>

    ImageViewMainActivity.java

    package com.android.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;
    
    /**
     * ImageView案例三:旋转图片
     * ImageView是用于显示图片的控件,支持对图片进行放大、缩小和旋转等
     * @author lynnli1229
     */
    public class ImageViewMainActivity extends Activity implements OnSeekBarChangeListener {
        
        private int minWidth = 80;
        private ImageView imageView;
        private TextView textView1, textView2;
        private Matrix matrix = new Matrix();
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            imageView = (ImageView) findViewById(R.id.imageView);
            textView1 = (TextView) findViewById(R.id.textView1);
            textView2 = (TextView) findViewById(R.id.textView2);
            SeekBar seekBar1 = (SeekBar) findViewById(R.id.seekBar1);
            SeekBar seekBar2 = (SeekBar) findViewById(R.id.seekBar2);
            seekBar1.setOnSeekBarChangeListener(this);
            seekBar2.setOnSeekBarChangeListener(this);
            DisplayMetrics outMetrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
            // 设置拖动条的最大值(屏幕的宽度-最小宽度)
            seekBar1.setMax(outMetrics.widthPixels - minWidth);
        }
    
        // 拖动滑竿时回调该方法
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if(seekBar.getId() == R.id.seekBar1) {
                int newWidth = progress+minWidth;
                int newHeight = (int) (newWidth*3/4);
                imageView.setLayoutParams(new LinearLayout.LayoutParams(newWidth, newHeight));
                textView1.setText("图像宽度:" + newWidth + ", 图像高度:" + newHeight);
            } else if(seekBar.getId() == R.id.seekBar2){
                Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.background)).getBitmap();
                // 设置图片旋转角度
                matrix.setRotate(progress);
                bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
                imageView.setImageBitmap(bitmap);
                textView2.setText("图像被旋转:" + progress + "度");
            }
            
        }
    
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            
        }
    
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            
        }
    }

    3案例效果展示

     
  • 相关阅读:
    curl 抓取图片
    checkbox 全选
    大文件断点上传 js+php
    php快速排序
    直接插入排序(Straight Insertion Sort)
    选择排序 Selection sort
    57.猴子吃桃问题
    56.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
    55.输入两个正整数m和n,求其最大公约数和最小公倍数
    54.将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
  • 原文地址:https://www.cnblogs.com/innosight/p/3271218.html
Copyright © 2020-2023  润新知