`

android 3D 相册

 
阅读更多

 

package com.test.photo;

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.graphics.drawable.BitmapDrawable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
public class ImageAdapter extends BaseAdapter {
    private Context mContext;
    private int[] mImageIds;
    private ImageView[] mImages;

    public ImageAdapter(Context context, int[] imageIds) {
        this.mContext = context;
        this.mImageIds = imageIds;
        mImages = new ImageView[imageIds.length];
    }

    @Override
    public int getCount() {
        return mImages.length;
    }

    @Override
    public Object getItem(int position) {
        return mImages[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return mImages[position];
    }

    // 生成带有倒影效果的图片
    public boolean createReflectedImages() {
        // 原图片与倒影之间的距离
        final int reflectionGap = 4;
        int index = 0;
        for (int imageId : mImageIds) {
            // 原图片
            Bitmap originalImage = BitmapFactory.decodeResource(
                    mContext.getResources(), imageId);

            int width = originalImage.getWidth();
            int height = originalImage.getHeight();

            // 创建矩阵对象
            Matrix matrix = new Matrix();
            matrix.preScale(1, -1);
            // 将矩阵应用到该原图之中,返回一个宽度不变,高度为原图1/2的倒影位图
            Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0,
                    height / 2, width, height / 2, matrix, false);

            // 创建一个宽度不变,高度为原图+倒影图高度的位图
            Bitmap bitmapWithReflection = Bitmap.createBitmap(width, height
                    + height / 2, Config.ARGB_8888);
            // 创建画布
            Canvas canvas = new Canvas(bitmapWithReflection);
            // 绘制原图片
            canvas.drawBitmap(originalImage, 0, 0, null);
            // 绘制原图片与倒影之间的距离
            Paint defaultpaint = new Paint();
            canvas.drawRect(0, height, width, height + reflectionGap,
                    defaultpaint);
            // 绘制倒影图片
            canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);

            Paint paint = new Paint();
            paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
            LinearGradient shader = new LinearGradient(0, height, 0,
                    bitmapWithReflection.getHeight() + reflectionGap,
                    0x70FFFFFF, 0x00FFFFFF, TileMode.MIRROR);
            // 着色器 用来绘制颜色 上色的
            paint.setShader(shader);
            canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()
                    + reflectionGap, paint);

            // 创建一个ImageView用来显示已经画好的bitmapWithReflection
            ImageView imageView = new ImageView(mContext);
            BitmapDrawable bd = new BitmapDrawable(bitmapWithReflection);
            // 消除图片锯齿效果
            bd.setAntiAlias(true);
            imageView.setImageDrawable(bd);
            // 设置图片的大小
            imageView.setLayoutParams(new GalleryFlow.LayoutParams(160, 240));
            mImages[index++] = imageView;
        }
        return true;
    }
}

 

package com.test.photo;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;


public class MainActivity extends Activity {
    private GalleryFlow mGalleryFlow;

    private int[] imageIds = new int[] { R.drawable.nba_1, R.drawable.nba_2,
            R.drawable.nba_3, R.drawable.nba_4, R.drawable.nba_5,
            R.drawable.nba_6, R.drawable.nba_7, R.drawable.nba_8,
            R.drawable.nba_9, R.drawable.nba_10,};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        findViews();
        initViews();
    }

    private void findViews() {
        mGalleryFlow = (GalleryFlow) findViewById(R.id.gf);
    }

    private void initViews() {
        ImageAdapter adapter = new ImageAdapter(this, imageIds);
        // 生成带有倒影效果的图片
        adapter.createReflectedImages();
        mGalleryFlow.setAdapter(adapter);
    }


}

 

<RelativeLayout 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"
    tools:context=".MainActivity"
    android:background="@android:color/black" >

    <com.test.photo.GalleryFlow
        android:id="@+id/gf"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

 

0
3
分享到:
评论

相关推荐

    Android 3D相册图片滑动+倾斜+放大+倒影处理源码-IT计算机-毕业设计.zip

    这篇文档将深入解析《Android 3D相册图片滑动+倾斜+放大+倒影处理源码》这一项目,这是一个适合计算机专业学生进行毕业设计学习的Android应用源码示例。我们将探讨其中的关键技术点,包括3D效果实现、图片滑动交互、...

    android 3d相册代码

    android 3d grally的代码,实现3D相册功能

    android 3d相册源码

    在Android平台上,开发一款引人入胜的3D相册应用可以极大地提升用户体验。"android 3d相册"源码提供了一个实现此类功能的实例,对于开发者来说,这是一个宝贵的资源,可以用来学习如何在Android上创建具有立体视觉...

    android 3D相册完美实现

    本项目名为"android 3D相册完美实现",它展示了如何将普通的相册功能提升到一个新的维度,包括立体滑动和透明阴影等特效。 首先,3D相册的核心在于实现图片的三维旋转和平移。这通常涉及到Android的`ImageView`或...

    Android 3D相册图片滑动倾斜放大倒影处理源码

    "Android 3D相册图片滑动+倾斜+放大+倒影处理源码"是一个专门针对这一需求的解决方案,它提供了丰富的3D效果,使得用户在浏览相册时能感受到更加生动、立体的视觉体验。 首先,我们要理解3D相册的核心概念。在...

    android 3D相册

    android 供学习 3D 相册开发

    超炫的android 3d相册

    超炫的android 3d相册

    Android 3D相册图片滑动+倾斜+放大+倒影处理源码.zip

    这篇内容将深入解析《Android 3D相册图片滑动+倾斜+放大+倒影处理源码》这一项目,帮助你理解如何在Android平台上实现一个功能丰富的3D相册应用。我们将探讨涉及到的关键技术点,包括图像处理、手势检测、动画效果...

    Android 3D相册图片滑动+倾斜+放大+倒影处理源码.rar

    这个"Android 3D相册图片滑动+倾斜+放大+倒影处理源码"提供了实现此类高级视觉效果的方法。下面将详细探讨这个源码中的关键知识点。 1. **3D相册效果**:此源码实现了3D翻转效果,让用户在浏览相册时仿佛在操作真实...

    android 3D相册 无错误源码

    在Android平台上,开发一款3D相册应用可以提供独特的用户体验,让图片浏览变得更加生动有趣。本资源提供的"android 3D相册 无错误源码"是一个完整的、经过验证的项目,适合开发者学习或者直接应用于自己的项目中。...

    Android 3D相册图片滑动+倾斜+放大+倒影处理源码

    在Android开发中,创建一个具有视觉吸引力的3D相册是一项挑战,但通过巧妙地结合各种技术,可以实现像标题中描述的那样——3D相册图片滑动、倾斜、放大以及倒影处理。这个源码项目正是为了解决这个问题,提供了一种...

    Android 3D相册实现demo

    Android 3D相册实现demo

    Android3D相册图片滑动-倾斜-放大-倒影处理源码.zip

    本项目"Android3D相册图片滑动-倾斜-放大-倒影处理源码"提供了一种创新的方式,使用户可以以3D效果浏览相册,增强了视觉效果和互动性。以下是该项目涉及的关键技术点和实现原理的详细解析。 1. **3D 图片滑动**: ...

    Android 3D相册图片滑动+倾斜+放大+倒影处理源码.zip项目安卓应用源码下载

    Android 3D相册图片滑动+倾斜+放大+倒影处理源码.zip项目安卓应用源码下载Android 3D相册图片滑动+倾斜+放大+倒影处理源码.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司...

    android相册3D源码

    在Android平台上,开发一款引人注目的3D相册应用是一项技术挑战,它不仅需要对Android UI组件有深入理解,还要掌握3D图形编程。"android相册3D源码"是一个专为Android设计的3D相册实现,提供了一种独特的方式来展示...

    Android应用源码3D相册.zip

    《Android应用源码3D相册》是一款基于Android平台的3D效果相册应用程序,它展示了如何在Android环境中实现复杂的视觉特效,同时提供了一个学习和借鉴的实例。本项目源码主要采用Java语言编写,是Android开发者提升...

Global site tag (gtag.js) - Google Analytics