Androidの中の透明度の処理(美人の服を引き裂くことを例にして)

9582 ワード

原理紹介:二つの異なる効果の写真を同じ位置に置いて、上の写真の透明度を変えることで、実現できます.
レイアウトファイル:
<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"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    android:paddingBottom="@dimen/activity_vertical_margin"

    tools:context=".MainActivity">



    <ImageView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centerInParent="true"

        android:id="@+id/iv_bottom" />



    <ImageView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centerInParent="true"

        android:id="@+id/iv_top" />

</RelativeLayout>
MainActivity
package cn.seanlou.stripclothes;



import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.os.Bundle;

import android.util.Log;

import android.view.MotionEvent;

import android.view.View;

import android.widget.ImageView;





public class MainActivity extends Activity {

    private ImageView ivBottom;

    private ImageView ivTop;

    private Bitmap imgBlank;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        findView();

        init();

    }



    /**

     *        

     */

    private void init() {

        BitmapFactory.Options options = new BitmapFactory.Options();

        options.inSampleSize = 1;

        //          ,BitmapFactory.decodeResource()           RGB   ,     ARGB   。

        Bitmap imgTop = BitmapFactory.decodeResource(getResources(), R.mipmap.g1_up, options);

        //

        Bitmap imgBottom = BitmapFactory.decodeResource(getResources(), R.mipmap.g1_back, options);

        //            imgTop     Bitmap  ,       ARGB   。

        imgBlank = Bitmap.createBitmap(imgTop.getWidth(), imgTop.getHeight(), Bitmap.Config.ARGB_4444);

        // imgBlank     。

        Canvas canvas = new Canvas(imgBlank);

        // imgTop     

        canvas.drawBitmap(imgTop, 0, 0, null);



        ivTop.setImageBitmap(imgBlank);

        ivBottom.setImageBitmap(imgBottom);



        ivTop.setOnTouchListener(new MyOnTouchListener());

    }



    private void findView() {

        ivTop = (ImageView) findViewById(R.id.iv_top);

        ivBottom = (ImageView) findViewById(R.id.iv_bottom);

    }



    private class MyOnTouchListener implements View.OnTouchListener {

        @Override

        public boolean onTouch(View v, MotionEvent event) {

            if (event.getAction() == MotionEvent.ACTION_MOVE) {



                int x = (int) event.getX();

                int y = (int) event.getY();

                Log.i("location", "     x:" + x + ",y:" + y);

                for (int i = x - 20; i < x + 20; i++) {

                    for (int j = y - 20; j < y + 20; j++) {

                        //        

                        if (i >= 0 && i < imgBlank.getWidth() && j >= 0 && j < imgBlank.getHeight()) {

                            //        

                            imgBlank.setPixel(i, j, Color.TRANSPARENT);

                        }

                    }

                }

                //    

                ivTop.setImageBitmap(imgBlank);

            }

            return true;

        }

    }

}