第16章:ImageView及其子类

来源:互联网 发布:看图软件acdsee 编辑:程序博客网 时间:2024/05/05 21:42

ImageView继承自View组件,ImageView派生了ImageButton、ZoomButton等组件。

下面通过个实例来看下具体用法:

实例:图片浏览器

本实例的图片浏览器可以改变查看图片的透明度,可以通过调用ImageView的setImageAlpha()方法实现。可以通过一个小区域来查看图片的原始大小,因此本实例会定义两个ImageView,一个用于查看图片整体,一个用于查看图片的细节。

activity_main.xml

<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"    android:gravity="center_horizontal"    tools:context=".MainActivity">    <LinearLayout        android:layout_marginTop="10dp"        android:gravity="center_horizontal"        android:orientation="horizontal"        android:layout_width="wrap_content"        android:layout_height="wrap_content">        <Button            android:id="@+id/amplification"            android:text="@string/amplification"            android:layout_width="80dp"            android:layout_height="wrap_content" />        <Button            android:id="@+id/narrow"            android:text="@string/narrow"            android:layout_marginLeft="20dp"            android:layout_marginRight="20dp"            android:layout_width="80dp"            android:layout_height="wrap_content" />        <Button            android:id="@+id/next"            android:text="@string/next"            android:layout_width="80dp"            android:layout_height="wrap_content" />    </LinearLayout>     <ImageView        android:id="@+id/image1"        android:layout_width="wrap_content"        android:layout_height="239dp"        android:src="@drawable/a"        android:scaleType="fitCenter"/>    <ImageView        android:id="@+id/image2"        android:layout_width="150dp"        android:layout_height="150dp" /></LinearLayout>

MainActivity.java

package cn.edu.hpu.acm.imageViewTest;import android.graphics.Bitmap;import android.graphics.drawable.BitmapDrawable;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends AppCompatActivity {    private Button amplification;    private Button narrow;    private Button next;    private ImageView imageView1;    private ImageView imageView2;    int[] images = new int[]{            R.drawable.a,            R.drawable.b,            R.drawable.c,            R.drawable.d,            R.drawable.e,            R.drawable.f,            R.drawable.g,    };    int currentImg = 2;    private int alpha = 255;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        amplification = (Button) findViewById(R.id.amplification);        narrow = (Button) findViewById(R.id.narrow);        next = (Button) findViewById(R.id.next);        imageView1 = (ImageView) findViewById(R.id.image1);        imageView2 = (ImageView) findViewById(R.id.image2);        next.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //控制显示下一张图片                imageView1.setImageResource(images[++currentImg%images.length]);            }        });        View.OnClickListener listener = new View.OnClickListener() {            @Override            public void onClick(View v) {                if (v==amplification){                    alpha +=20;                }                if (v==narrow){                    alpha -=20;                }                if (alpha>=255){                    alpha = 255;                }                if (alpha<=0){                    alpha = 0;                }                //设置图片的显示透明度                imageView1.setImageAlpha(alpha);            }        };        amplification.setOnClickListener(listener);        narrow.setOnClickListener(listener);        //设置图片的触摸监听器        imageView1.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                //创建一个Bitmap对象                BitmapDrawable bitmapDrawable = (BitmapDrawable) imageView1.getDrawable();                //获得触摸位置的图片                Bitmap bitmap = bitmapDrawable.getBitmap();                //bitmp 图片实际大小与第一个ImageView的缩放比例                double scale = 1.0 * bitmap.getHeight() / imageView1.getHeight();                //获取需要显示的图片的任意点                int x = (int) (event.getX()*scale);                int y = (int) (event.getY()*scale);                if (x+120>bitmap.getWidth()){                    x = bitmap.getWidth()-120;                }                if (y+120>bitmap.getHeight()){                    y = bitmap.getHeight()-120;                }                //显示图片的指定区域                imageView2.setImageBitmap(Bitmap.createBitmap(bitmap,x,y,120,120));                imageView2.setImageAlpha(alpha);                return false;            }        });    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.menu_main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        //noinspection SimplifiableIfStatement        if (id == R.id.action_settings) {            return true;        }        return super.onOptionsItemSelected(item);    }}

String.xml

<resources>    <string name="app_name">图片浏览器</string>    <string name="hello_world">Hello world!</string>    <string name="action_settings">Settings</string>    <string name="amplification">放大透明</string>    <string name="narrow">缩小透明</string>    <string name="next">下一张</string></resources>


0 0