撕掉美女衣服安卓游戏开发(GridView实现画廊效果,带注释)

原创 2014年08月23日 09:32:36

                                                                                           文章参照了GridView实现画廊效果,还有黑马程序员视频教程中的简单撕掉美女游戏介绍。(网上核心的教程好像也是黑马视频这里面的,不过这里面没有进行bug处理,就是越界判断,还有就是只能在左上角显示,粗糙的画笔效果看起来让人很不爽。自己调这些bug,百度查阅了一两天,本人是个新手,起初对这个游戏感兴趣是由于自己想到,要是做成这个软件,然后通过PS把里面的图片换成朋友的图片,用来娱乐让朋友玩玩应该很好玩)。

下面展示下程序效果图。

(1)程序图标(自己用在线美图修饰)



(2)选中要撕开衣服的美女图


通过GridView实现这种画廊效果(Gallery早就过期了,个人不喜欢用过期的东西)


(3)撕开美女衣服(点击发出声音,圆形画笔效果,选择的图片和撕开的效果图)


个人觉得声音的话,可以一个图片播放很多个声音,触摸的位置相应的播放不同的声音。(该程序中简单的播放一种声音)。




程序部分代码:

public class MainActivity extends Activity implements OnItemClickListener {



private GridView gridView;
private ImageSwitcher imageSwitcher;
private int index;//保存当前选择的图片位置


private int[] aId = new int[] { R.drawable.b0, R.drawable.b1,
R.drawable.b2, R.drawable.b3, R.drawable.b4,
R.drawable.b5, R.drawable.b6, R.drawable.b7,
R.drawable.b8, R.drawable.b9, R.drawable.b10,
R.drawable.b11,R.drawable.b12,R.drawable.b13


};
private int[] imageId=new int[]{
R.drawable.a0, R.drawable.a1,
R.drawable.a2, R.drawable.a3, R.drawable.a4,
R.drawable.a5, R.drawable.a6, R.drawable.a7,
R.drawable.a8, R.drawable.a9, R.drawable.a10,
R.drawable.a11,R.drawable.a12,R.drawable.a13
};




@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);//设置界面没有标题
super.onCreate(savedInstanceState);

setContentView(R.layout.main);
init();


}

public void init()
{

         index=0;
// 利用BaseAdapter创建,只显示图片
imageSwitcher=(ImageSwitcher) findViewById(R.id.imageSwitcher);


//淡入淡出动画
imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this,android.R.anim.fade_in));
imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this,android.R.anim.fade_out));


//显示的大图
imageSwitcher.setFactory(new ViewFactory() {

@Override
public View makeView() {

ImageView imageView=new ImageView(MainActivity.this);

imageView.setScaleType(ScaleType.FIT_CENTER);//保持横纵比居中缩放图像
imageView.setLayoutParams(new ImageSwitcher.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));




return imageView;
}
});


imageSwitcher.setImageResource(imageId[index]);//设置默认的图片




imageSwitcher.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

Intent intent=new Intent();
intent.putExtra("picture_id", imageId[index]);
intent.putExtra("a_id", aId[index]);
intent.setClass(MainActivity.this,UndressActivity.class);
   startActivity(intent);

}
});



   
        gridView=(GridView) findViewById(R.id.gridView1);
BaseAdapter adapter2=new BaseAdapter( ) {
ImageView imageView;
@Override
public View getView(int position, View convertView, ViewGroup parent) {



if(convertView==null){
imageView=new ImageView(MainActivity.this);


}
else{
imageView=(ImageView)convertView;
}


imageView.setAdjustViewBounds(true);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setPadding(1, 3, 1, 3);
BitmapFactory.Options opts=new Options();
opts.inSampleSize=6;//设置加载的图片位图为原来像素的1/6

Bitmap bitmap=BitmapFactory.decodeResource(getResources(), imageId[position],opts);

imageView.setImageBitmap(bitmap);
//imageView.setImageResource(imageId[p;osition]);

return imageView;
}

@Override
public long getItemId(int position) {

return position;
}

@Override
public Object getItem(int position) {


return position;
}

@Override
public int getCount() {

return imageId.length;
}
};

...............................


}


@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

index=position;
imageSwitcher.setImageResource(imageId[index]);



}


 
}






(2)UndressActivity

public class UndressActivity extends Activity {
//FrameLayout中的两个ImageView
private ImageView iv_after;//后面的ImageView
private ImageView iv_before;//前面的ImageView
private Bitmap alterBitmap;
private Canvas canvas;//画布
private Paint paint;//画笔
private int width;//图片宽度(获取屏幕的宽度)
private int height;//图片高度(获取屏幕的高度)
private Bitmap after; //后面的图片位图
private Bitmap before;//前面的图片位图
private int radius;//擦除bitmap的圆半径的大小
private MediaPlayer mediaPlayer;

@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);//设置界面没有标题
super.onCreate(savedInstanceState);

setContentView(R.layout.undress);
Intent intent=getIntent();
int pictureId=intent.getIntExtra("picture_id", R.drawable.a0);
int afterId=intent.getIntExtra("a_id", R.drawable.b0);
DisplayMetrics metrics =new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    width=metrics.widthPixels;
height=metrics.heightPixels;
radius=20;
    mediaPlayer=MediaPlayer.create(UndressActivity.this, R.raw.girl);

System.out.println(width+"fffff"+height);
BitmapFactory.Options opts=new Options();
opts.inSampleSize=1;

iv_after=(ImageView) findViewById(R.id.after);
iv_before=(ImageView) findViewById(R.id.pre);
//只读的图片
before=BitmapFactory.decodeResource(getResources(), pictureId,opts);


after=BitmapFactory.decodeResource(getResources(), afterId,opts);
//可以修改的空白的bitmap
    alterBitmap=Bitmap.createBitmap(width, height,Config.ARGB_8888);
canvas=new Canvas(alterBitmap);//canvas上画的东西会保存在alterBitmap中。
//设置颜色来显示画图区域  
    canvas.drawColor(Color.TRANSPARENT); //canvas背景颜色
paint=new Paint();
paint.setStrokeCap(Cap.ROUND);  
    paint.setStrokeJoin(Join.ROUND);  
paint.setStrokeWidth(5);
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);  //抗锯齿
....................................



iv_before.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mediaPlayer.start();//播放声音
break;


case MotionEvent.ACTION_MOVE:
int newX=(int)event.getX();
int newY=(int)event.getY();


//将触摸区域,图片的像素设为透明  
for(int i=-3;i<=3;i++)
for(int j=-3;j<=3;j++)
{
int x=i+newX;
int y=j+newY;

if((x-radius>=0&&width-x>=0) && (y-radius>=0&&height-y>=0))
{

canvas.drawCircle(x, y, radius, paint);
iv_before.setImageBitmap(alterBitmap);//将beforeImageView的位图设置为alterBitmap
}

}


break;


}
return true;
}
});



}
//缩放Bitmap的像素大小
..........................



main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
<ImageSwitcher 
       android:id="@+id/imageSwitcher"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="4"
         android:background="@drawable/bg"
    />
    <HorizontalScrollView
        android:id="@+id/horizontalScrollView"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
         >
         
<LinearLayout
            android:id="@+id/girls_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent" 
            android:orientation="horizontal">
             
           <GridView
               android:id="@+id/gridView1"
               android:gravity="center" 
               android:layout_height="match_parent"
               android:layout_width="fill_parent"
              />


      </LinearLayout>
    </HorizontalScrollView>


</LinearLayout>


undress.xml:


<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:background="@drawable/bg">
    <ImageView 
        android:id="@+id/after"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
  />
  <ImageView 
        android:id="@+id/pre"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
      
        
      />
    
    


</FrameLayout>


程序下载地址:

http://download.csdn.net/detail/lxz26192/7805635


ViewPager实现画廊效果

1.先看一下效果2.技术要点:1、setClipChildren(boolean clipChildren)方法: clipChild用来定义他的子控件是否要在他应有的边界内进行绘制。 默认情况下,...
  • ForrestL
  • ForrestL
  • 2016年08月04日 10:44
  • 8452

Android基于GridView实现的翻牌游戏效果

好久没有写博客了,上一篇博文距现在都有七个多月了,实在是惭愧。但是这段时间仍然是在忙于项目或是自我充电。这几天实现了一个基于GridView的翻牌动画效果,这里就将其整理出来同各位分享。   一...
  • ldstartnow
  • ldstartnow
  • 2015年08月09日 16:57
  • 1157

Android画廊效果-Gallery和ViewPager不同实现

之前项目开发的时候要实现一种画廊效果,分别利用Gallery或ViewPager实现了该效果:...
  • mwq384807683
  • mwq384807683
  • 2016年11月13日 22:40
  • 2841

iOS开发之实现图片自动切换(类似android画廊效果)

#import "ViewController.h" #define ImageViewCount 5 @interface ViewController () @property (weak, ...
  • violetIC
  • violetIC
  • 2015年02月03日 16:33
  • 1418

仿lofter标签效果 ViewPager实现画廊效果

目前网上关于画廊效果的实现都是采用gallery(已弃用)或作横向 GridView,或作是横向scrollview,这些方式在画廊item滑动的时候效果不是特别流畅,而且代码相对比较繁琐,需要在滑动...
  • xiaomingdbaba
  • xiaomingdbaba
  • 2016年09月09日 14:41
  • 2053

Android应用《撕开美女衣服》的实现过程及源代码

现在很多Android市场中都能找到关于美女的应用,比如 撕开美女衣服、吹裙子等。 这些应用的下载量挺大的,作为Android的开发人员或者一名技术人员我们不能只局限在欣赏应用的层面,很多时候需要我们...
  • lxq_xsyu
  • lxq_xsyu
  • 2013年12月20日 13:20
  • 6005

利用ViewPager实现画廊Gallery效果

1 需求确认 2利用viewpager实现画廊效果 viewpager的继承关系 使用ViewGroup的setClipChildrenboolean clipChildren方法 使用viewpag...
  • m0_37168878
  • m0_37168878
  • 2017年05月24日 14:42
  • 1406

Gallery的基本使用(实现了3D画廊的效果)

Gallery是一个内部元素可以水平滚动,并且可以把当前选择的子元素定位在它中心的布局组件。下面是一个实现3D画廊的小demo MainActivity.class package com.c...
  • jiahuan0207
  • jiahuan0207
  • 2016年06月07日 17:37
  • 808

Android开发 GridView分页效果

最后实现的效果如下图红框所示: 下面具体分析一下如何实现:1 查找到系统中所有的应用程序信息 2 定出每页显示的应用数量 3 算出需要的页数上图实现了,每一页对应一个GridView,并用...
  • qq_15267341
  • qq_15267341
  • 2016年10月24日 18:17
  • 983

Android 仿美女撕衣服效果

因为我写demo的时候不是用一整屏幕来放置当前图片View的,且资源图也不小,所以用到了bitmap缩放 代码注释比较详尽,直接上了 package com.stone.guaguaka.view...
  • jjwwmlp456
  • jjwwmlp456
  • 2016年01月28日 15:17
  • 1414
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:撕掉美女衣服安卓游戏开发(GridView实现画廊效果,带注释)
举报原因:
原因补充:

(最多只允许输入30个字)