您现在的位置:首页 > 教案下载 > 正文

android 阅读器放大镜_android viewpager点击图片放大_android代码混淆器

2019-08-14 05:01 网络整理 教案网

android viewpager点击图片放大_android代码混淆器_android 阅读器放大镜

阅读更多

就在前三天.我得到了一个让我很很很很很很很震惊的消息.啊啊啊啊啊.就是在我博中最后经常提到的那个刘先生.哎...原来他一直在看我的博客......这个消息够冷门吧.没折.本来想不写了.或再申请个,让谁都找不到的.再一想.没必要么.刘先生也说了.你该写写.我该写也写.哎...他能原谅我.我真的很感谢了.嘿嘿.。圈主微笑的朝阳赵瑛老师是我的朋友,她班学生家长从孩子上一年级就给孩子开通了博客,开始是家长写自己的教子心得,孩子讲述自己的见闻家长记录,然后到孩子自己写。每次嫖娼后android 阅读器放大,他用手机拍摄嫖娼时的照片并写嫖娼心得,然后在公司的员工电子阅览室内电脑上,将其发到“佛山大炮”的“吃喝嫖赌”博客网页里。

去年某个时候,我偶然看到一篇文章,讲android里面放大镜的实现。文章很乱,没有格式,基本上属于看不下去的那种。虽然体裁很有意思,但是我也没有足够的内力把它看完。不过看到一句关键的话,说是使用带圆形的Drawable。这句话就够了,他下面写的一堆东西我也懒得看,于是就自己开始尝试,然后就做出来了。现在代码贴出来分享。

package chroya.demo.magnifier;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.view.MotionEvent;
import android.view.View;
/**
 * 放大镜实现方式1
 * @author chroya
 *
 */
public class ShaderView extends View{
	private Bitmap bitmap;
	private ShapeDrawable drawable;
	//放大镜的半径
	private static final int RADIUS = 80;
	//放大倍数
	private static final int FACTOR = 3;
	private Matrix matrix = new Matrix();
	public ShaderView(Context context) {
		super(context);
		Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.show);
		bitmap = bmp;		
		BitmapShader shader = new BitmapShader(
				Bitmap.createScaledBitmap(bmp, bmp.getWidth()*FACTOR,
						bmp.getHeight()*FACTOR, true), TileMode.CLAMP, TileMode.CLAMP);
		//圆形的drawable
		drawable = new ShapeDrawable(new OvalShape());
		drawable.getPaint().setShader(shader);
		drawable.setBounds(0, 0, RADIUS*2, RADIUS*2);
	}	
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		final int x = (int) event.getX();
		final int y = (int) event.getY();
		//这个位置表示的是,画shader的起始位置
		matrix.setTranslate(RADIUS-x*FACTOR, RADIUS-y*FACTOR);
		drawable.getPaint().getShader().setLocalMatrix(matrix);
		//bounds,就是那个圆的外切矩形
		drawable.setBounds(x-RADIUS, y-RADIUS, x+RADIUS, y+RADIUS);
		invalidate();
		return true;
	}
	
	@Override
	public void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		canvas.drawBitmap(bitmap, 0, 0, null);
		drawable.draw(canvas);
	}
}

基本原理就是使用ShapeDrawable构造一个圆形的drawable,然后它的paint的shader设置为将要放大的图片,然后就是简单的位置移动问题了。放大镜的半径和放大倍数都可以在代码里面修改,代码都有注释,应该很好理解了。

不过,一个问题如果只有一种解决方法的话,那未免有点令人沮丧,想玩点另类的都不行。

玩程序就得玩出个性,玩出激情。哈哈,废话太多,切回正题。

再来看看放大镜的另外一种实现吧 ^-^

package chroya.demo.magnifier;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Path;
import android.graphics.Path.Direction;
import android.view.MotionEvent;
import android.view.View;
/**
 * 放大镜实现方式2
 * @author chroya
 *
 */
public class PathView extends View{
	private Path mPath = new Path();
	private Matrix matrix = new Matrix();
	private Bitmap bitmap;
	//放大镜的半径
	private static final int RADIUS = 80;
	//放大倍数
	private static final int FACTOR = 2;
	private int mCurrentX, mCurrentY;
	public PathView(Context context) {
		super(context);
		mPath.addCircle(RADIUS, RADIUS, RADIUS, Direction.CW);
		matrix.setScale(FACTOR, FACTOR);
		
		bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.show);
	}	
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		mCurrentX = (int) event.getX();
		mCurrentY = (int) event.getY();
		
		invalidate();
		return true;
	}
	
	@Override
	public void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		//底图
		canvas.drawBitmap(bitmap, 0, 0, null);
		//剪切
		canvas.translate(mCurrentX - RADIUS, mCurrentY - RADIUS);
		canvas.clipPath(mPath);	
		//画放大后的图
		canvas.translate(RADIUS-mCurrentX*FACTOR, RADIUS-mCurrentY*FACTOR);
		canvas.drawBitmap(bitmap, matrix, null);		
	}
}

这里使用的是Path类,将canvas剪切出一块圆形区域,在其上绘制放大的部分。

两种方式的效果都一样,如图:

android viewpager点击图片放大_android 阅读器放大镜_android代码混淆器

放大两倍的效果。

放大三倍

貌似还缺点什么,是吧? 嘿嘿,就是放大镜外面缺个框。那玩意,我没资源,所以懒得弄了,有兴趣的自己加吧。

工程见附件。

应用程序动态全屏和退出全屏|Android简单的圆盘形菜单

9 楼老鼠头0072012-02-24

多谢楼主的分享,收益很多,期待你更好的文章,只是,小弟我还有个问题还望楼主有时间指教一下,我用webview实现了网页缩小放大的功能,只是自带的老显示一个放大镜,请问有没有办法让这个放大镜不显示,我用的是多点触摸缩放,不需要这个放大镜

8 楼flyingsir_zw2012-02-22

package chroya.demo.magnifier;

android viewpager点击图片放大_android 阅读器放大镜_android代码混淆器

import android.app.Activity;

import android.os.Bundle;

public class Main extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(new ShaderView(this));

// setContentView(new PathView(this));

}

}

ShaderView 当放大镜超出图片范围时,程序会异常退出,没有错误报告.

android viewpager点击图片放大_android 阅读器放大镜_android代码混淆器

能简单介绍下运行原理吗?

7 楼琼露露2011-10-26

已读,嘿嘿.

6 楼chroya2011-04-07

a54cc 写道

还记得你看的那篇看不下去的文章么,也想看一下。

去年的事了,而且还是偶然看到的,没有记下地址,sorry了

5 楼a54cc2011-04-07

还记得你看的那篇看不下去的文章么,也想看一下。

4 楼lijiaji_hy2011-03-18

chroya 写道

android viewpager点击图片放大_android 阅读器放大镜_android代码混淆器

lijiaji_hy 写道

“貌似还缺点什么,就是放大镜外面缺个框” 你先把它做成针对屏幕放大吧,做到对固定的图片放大没有任何义意,有没有框不是最关键的。

你的意思是放大当前屏幕的内容,不论屏幕上显示的是什么?

记者看到,根据屏幕上出现的江苏省行政区域图,用手指触按相应按钮,不断放大地图,屏幕会显示出所在村庄的卫星照片。据史红哲透露,当前,乐信正研究区块链技术的落地应用,在公司各部门及与合作金融机构之间,搭建一个可共享的“超级账本”。”国家能源局新能源和可再生能源司副调研员透露,下一步最主要是推动技术进步、成本下降,扩大多元化应用,降本增效,充分发挥国家补贴的作用。

3 楼chroya2011-03-07

lijiaji_hy 写道

题外话,有些sf把终极武器替换成150爆7的真仙模型,也有做成时装武器(貌似没精炼特效)的,对血魂焚天真武念念不忘的楼主来说简直不能爱更多啊有木有。安装围笼时,应进行测量定位,用一层导框做成的围笼,一般是先打定位桩,再在定位桩上挂装导框android 阅读器放大镜,导框可在岸边组成,浮运到位以缆索锚碇,在开始插打板桩后,逐步将导框转挂在已打好的板桩上,用有脚手桩的转盘式或旋转式桩架时,导框可挂装在外侧的脚手桩上。f" faem magrnwiith=vdaule>ffamer csorllin=valge>u 规定窗内框示什么htm显文l档命 名窗框或域以区别的便窗可以框指它向 义定框左右窗边缘的白空大,必小须于等大于 1定窗义框下边缘上空白的大小,须大于必于1等设 置窗框是否滚有栏,其值动以可"是es"y,"n",oa"tu"o,缺时一般为省auto""禁止 户调整一个窗框用的大 小于功对能的表单,一般需性运行一个cg要i小序,程hmt仅l仅产生表是的表单面子。

你的意思是放大当前屏幕的内容,不论屏幕上显示的是什么?

2 楼lijiaji_hy2011-03-07

题外话,有些sf把终极武器替换成150爆7的真仙模型,也有做成时装武器(貌似没精炼特效)的,对血魂焚天真武念念不忘的楼主来说简直不能爱更多啊有木有。安装围笼时,应进行测量定位,用一层导框做成的围笼,一般是先打定位桩,再在定位桩上挂装导框,导框可在岸边组成,浮运到位以缆索锚碇,在开始插打板桩后,逐步将导框转挂在已打好的板桩上,用有脚手桩的转盘式或旋转式桩架时,导框可挂装在外侧的脚手桩上。f" faem magrnwiith=vdaule>ffamer csorllin=valge>u 规定窗内框示什么htm显文l档命 名窗框或域以区别的便窗可以框指它向 义定框左右窗边缘的白空大,必小须于等大于 1定窗义框下边缘上空白的大小,须大于必于1等设 置窗框是否滚有栏,其值动以可"是es"y,"n",oa"tu"o,缺时一般为省auto""禁止 户调整一个窗框用的大 小于功对能的表单,一般需性运行一个cg要i小序,程hmt仅l仅产生表是的表单面子。

1 楼ET焖猪仔2011-02-27