关闭

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

标签: 安卓游戏gridview
839人阅读 评论(0) 收藏 举报

                                                                                           文章参照了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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:14738次
    • 积分:469
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:3篇
    • 译文:0篇
    • 评论:1条
    最新评论