在ANDROID 疯狂讲义书上看到的例子
图片浏览器,可以通过setalpha方法改变透明度
首先先准备五张图片,我现在drawable里面粘贴了五张taylor的图片(多爱偶像啊,写代码也想着她)
在activity_main.xml文件中
<?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="com.example.sybil.imageviewdemo.MainActivity"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/but01" android:text="@string/increaseap"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/but02" android:text="@string/decreaseal"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/but03" android:text="@string/next"/> </LinearLayout> <ImageView android:id="@+id/img01" android:layout_width="fill_parent" android:layout_height="178dp" android:adjustViewBounds="true" android:src="@drawable/taylor01" /> <ImageView android:id="@+id/img02" android:layout_width="fill_parent" android:layout_height="178dp" android:background="#0df" android:src="@drawable/taylor02" /> </LinearLayout>
在MainActivity.java中,
package com.example.sybil.imageviewdemo; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends AppCompatActivity { //定义一个访问图片的数组 int[] images=new int[]{ R.drawable.taylor01, R.drawable.taylor02, R.drawable.taylor03, R.drawable.taylor04, R.drawable.taylor05, }; //定义默认显示的图片 int currentImg=2; //定义图片的初始透明度 private int alpha=255; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Button plus= (Button) findViewById(R.id.but01);//返回一个View对象,强制类型转为Button final Button minus= (Button) findViewById(R.id.but02); final ImageView image1= (ImageView) findViewById(R.id.img01); final ImageView image2= (ImageView) findViewById(R.id.img02); final Button next= (Button) findViewById(R.id.but03); next.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //控制ImageView显示下一张图片 image1.setImageResource(images[++currentImg%images.length]); } }); //定义改变图片透明度的方法 View.OnClickListener listener=new View.OnClickListener() { @Override public void onClick(View v) { if(v==plus){//v是view对象,plus是button对像 alpha+=20; } if(v==minus){ alpha-=20; } if(alpha>=255){ alpha=255; } if(alpha<=0){ alpha=0; } //改变图片的透明度 image1.setAlpha(alpha); } }; //为两个按钮添加监听器 plus.setOnClickListener(listener); minus.setOnClickListener(listener); image1.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { BitmapDrawable bitmapDrawable= (BitmapDrawable) image1.getDrawable(); //获取第一个图片显示框的位图 Bitmap bitmap=bitmapDrawable.getBitmap(); //bitmap图片实际大小与第一个ImageView的缩放比例 double scale=bitmap.getWidth()/320.0; //获取需要显示的图片的开始点 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; } //显示图片的指定区域 image2.setImageBitmap(Bitmap.createBitmap(bitmap,x,y,120,120)); image2.setAlpha(alpha); return false; } }); } }
书上说:
粗体部分的的代码段会从源位图的触碰点截取源代码,并将截取部分 显示在第二个imageview中。