package com.example.demo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Shader.TileMode;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
public class ImageAdapter extends BaseAdapter {
private ImageView[] mImages; // 保存倒影图片的数组
private Context mContext;
public List<Map<String, Object>> list;
public Integer[] imgs = { R.drawable.image01, R.drawable.image02, R.drawable.image03,
R.drawable.image04, R.drawable.image05, R.drawable.image06};
public String[] titles = { "美图01", "美图02", "美图03", "美图04", "美图05", "美图06"};
public ImageAdapter(Context c) {
this.mContext = c;
list = new ArrayList<Map<String, Object>>();
for (int i = 0; i < imgs.length; i++) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("image", imgs[i]);
list.add(map);
}
mImages = new ImageView[list.size()];
}
/** 反射倒影 */
public boolean createReflectedImages() {
final int reflectionGap = 4;
final int Height = 200;
int index = 0;
for (Map<String, Object> map : list) {
Integer id = (Integer) map.get("image");
Bitmap originalImage = BitmapFactory.decodeResource(mContext.getResources(), id); // 获取原始图片
int width = originalImage.getWidth();
int height = originalImage.getHeight();
float scale = Height / (float)height;
Matrix sMatrix = new Matrix();
sMatrix.postScale(scale, scale);
Bitmap miniBitmap = Bitmap.createBitmap(originalImage, 0, 0,
originalImage.getWidth(), originalImage.getHeight(), sMatrix, true);
int mwidth = miniBitmap.getWidth();
int mheight = miniBitmap.getHeight();
Matrix matrix = new Matrix();
matrix.preScale(1, -1); // 图片矩阵变换(从低部向顶部的倒影)
Bitmap reflectionImage = Bitmap.createBitmap(miniBitmap, 0, mheight/2, mwidth, mheight/2, matrix, false); // 截取原图下半部分
Bitmap bitmapWithReflection = Bitmap.createBitmap(mwidth, (mheight + mheight / 2), Config.ARGB_8888); // 创建倒影图片(高度为原图3/2)
Canvas canvas = new Canvas(bitmapWithReflection); // 绘制倒影图(原图 + 间距 + 倒影)
canvas.drawBitmap(miniBitmap, 0, 0, null); // 绘制原图
Paint paint = new Paint();
canvas.drawRect(0, mheight, mwidth, mheight + reflectionGap, paint); // 绘制原图与倒影的间距
canvas.drawBitmap(reflectionImage, 0, mheight + reflectionGap, null); // 绘制倒影图
paint = new Paint();
LinearGradient shader = new LinearGradient(0, miniBitmap.getHeight(), 0, bitmapWithReflection.getHeight()
+ reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);
paint.setShader(shader); // 线性渐变效果
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); // 倒影遮罩效果
canvas.drawRect(0, mheight, mwidth, bitmapWithReflection.getHeight() + reflectionGap, paint); // 绘制倒影的阴影效果
ImageView imageView = new ImageView(mContext);
imageView.setImageBitmap(bitmapWithReflection); // 设置倒影图片
imageView.setLayoutParams(new GalleryView.LayoutParams(203,400)
);
imageView
.setScaleType(ScaleType.FIT_XY);
mImages[index++] = imageView;
}
return true;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public Object getItem(int position) {
return imgs[position%imgs.length];
}
@Override
public long getItemId(int position) {
return position%imgs.length;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//return mImages[position];
return mImages[position
% imgs.length];
// 显示倒影图片(当前获取焦点)
}
public float getScale(boolean focused, int offset) {
return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset)));
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
画廊效果 Grallery3D(程序源码).zip
共40个文件
class:14个
jpg:6个
java:5个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 60 浏览量
2023-03-17
08:26:17
上传
评论
收藏 1.1MB ZIP 举报
温馨提示
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。
资源推荐
资源详情
资源评论
收起资源包目录
画廊效果 Grallery3D(程序源码).zip (40个子文件)
Grallery3D
project.properties 361B
.classpath 380B
.settings
org.eclipse.jdt.core.prefs 598B
assets
src
com
example
demo
GalleryView.java 3KB
Main.java 3KB
ImageAdapter.java 4KB
res
values
strings.xml 176B
layout
main.xml 819B
drawable
image02.jpg 146KB
image04.jpg 30KB
image03.jpg 71KB
image06.jpg 37KB
image05.jpg 19KB
icon.png 7KB
image01.jpg 74KB
bin
classes
com
example
demo
GalleryView.class 4KB
Main$2.class 1KB
Main$1.class 883B
R$string.class 421B
R$layout.class 388B
Main.class 3KB
R$id.class 412B
BuildConfig.class 341B
R$attr.class 334B
ImageAdapter.class 6KB
R$drawable.class 580B
Main$3.class 2KB
R.class 517B
Main$4.class 1KB
resources.ap_ 386KB
jarlist.cache 119B
res
drawable
icon.png 4KB
Grallery3D.apk 395KB
classes.dex 15KB
AndroidManifest.xml 729B
proguard.cfg 1KB
.project 846B
AndroidManifest.xml 729B
gen
com
example
demo
BuildConfig.java 158B
R.java 1KB
共 40 条
- 1
资源评论
金枝玉叶9
- 粉丝: 137
- 资源: 7640
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功