安卓实现图片放大镜效果
2018-01-15 17:05
197 查看
一、准备图片
在drawable文件夹下放置需要进行轮询的图片
二、编写一个简单的布局文件
三、进行业务逻辑代码的编写
值得注意的地方:
1、布局文件中的
android:adjustViewBounds=”true”
android:scaleType=”centerInside”
这两句代码很重要,因为我的图片在ImageView中fitCenter显示,但是ImageView实际却比图片显示的大
导致点击图片显示以外的地方,都能够触发监听事件
2、OnTouchListener内部的逻辑代码编写要注意当图片宽或高过小,导致x和y出现负值的情况
在drawable文件夹下放置需要进行轮询的图片
二、编写一个简单的布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center"> <Button android:id="@+id/nextimg" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="下一张"/> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:layout_gravity="center_horizontal"> <!--定义显示图片整体的ImageView--> <ImageView android:id="@+id/big_image" android:layout_width="wrap_content" android:layout_height="240px" android:adjustViewBounds="true" android:scaleType="centerInside"/> <!--显示局部细节的ImageView--> <ImageView android:id="@+id/part_image" android:layout_width="120dp" android:layout_height="120dp" android:layout_marginTop="10dp"/> </LinearLayout> </LinearLayout>
三、进行业务逻辑代码的编写
package com.wuzhixiaobai.androidtest.test01; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.ImageView; import com.htss.androidtest.R; import org.jetbrains.annotations.Nullable; /** * Created by Administrator on 2018/num01/12. */ public class Test12Activity extends Activity{ //用于存储图片ID值的数组 private int[] images = new int[]{ R.drawable.num01, R.drawable.num02, R.drawable.num03, R.drawable.num04, R.drawable.num05, R.drawable.num06, }; private int currentImg = -1; private Button nextImg; private ImageView image1; private ImageView image2; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test12); initView(); initData(); addListener(); } private void initView(){ nextImg = findViewById(R.id.nextimg); image1 = findViewById(R.id.big_image); image2 = findViewById(R.id.part_image); image1.setImageResource(R.drawable.num01); } private void initData(){ image1.setImageResource(images[++currentImg % images.length]); BitmapDrawable bitmapDrawable = (BitmapDrawable) image1.getDrawable(); Bitmap bitmap = bitmapDrawable.getBitmap(); image2.setImageBitmap(Bitmap.createBitmap(bitmap, 0, 0, 120, 120)); } private void addListener(){ nextImg.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //当点击下一张的按钮时,实际上相当于进行两个IMageView的初始化,只是使用的图片不同了 initData(); } }); image1.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, Mot 4000 ionEvent motionEvent) { BitmapDrawable bitmapDrawable = (BitmapDrawable) image1.getDrawable(); Bitmap bitmap = bitmapDrawable.getBitmap(); double scale = bitmap.getWidth() / 240.0; int x = (int) (motionEvent.getX() * scale); int y = (int) (motionEvent.getY() * scale); if (x + 120 > bitmap.getWidth()) { int tempWidth = bitmap.getWidth() - 120; //防止图片宽度过小而产生负值 x = tempWidth > 0 ? tempWidth : bitmap.getWidth(); } if (y + 120 > bitmap.getHeight()) { int tempHeight = bitmap.getHeight() - 120; //防止图片高度过小而产生负值 y = tempHeight > 0 ? tempHeight : bitmap.getHeight(); } image2.setImageBitmap(Bitmap.createBitmap(bitmap, x, y, 120, 120)); return false; } }); } }
值得注意的地方:
1、布局文件中的
android:adjustViewBounds=”true”
android:scaleType=”centerInside”
这两句代码很重要,因为我的图片在ImageView中fitCenter显示,但是ImageView实际却比图片显示的大
导致点击图片显示以外的地方,都能够触发监听事件
2、OnTouchListener内部的逻辑代码编写要注意当图片宽或高过小,导致x和y出现负值的情况
相关文章推荐
- 原生javascript实现图片放大镜效果
- 基于angularjs实现图片放大镜效果
- Jquery实现图片放大镜效果的思路及代码
- bitmapshader 实现图片的放大镜效果
- JS实现图片放大镜效果的方法
- 分别用javascript,jquery实现 对图片的放大镜效果
- JQUERY实现鼠标悬停在图片上模拟放大镜效果
- 安卓(Android)ViewPager+TabLayout实现图片轮播效果
- JS实现图片放大镜效果的方法
- js实现图片放大镜效果
- Javascript实现图片的放大镜功能效果
- 图片放大镜效果-- jquery实现
- javascript实现图片放大镜效果
- Jquery实现图片放大镜效果的思路及代码(自写)
- 图片放大镜效果-- jquery实现
- 图片放大镜效果实现过程详解
- 图片放大镜效果实现过程详解
- 使用jqzoom来实现图片放大镜的效果
- 安卓学习笔记---实现下拉图片放大,松开又自动回去效果 (ListView与ScrollView)
- 用纯css3实现的图片放大镜特效效果非常不错