一个基于android的拼图游戏问题。希望有人帮我改进

weixin_44556753 2019-03-06 03:42:57
目前拼图游戏遇到的问题是 如何在本地图片游戏结束后让其播放一个声音。

在这个图的游戏结束后播放其动物对应的汉字的声音。

...全文
1563 50 打赏 收藏 转发到动态 举报
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_45076559 2019-05-18
  • 打赏
  • 举报
回复
我也想做,我有作业就是做这个
weixin_44556753 2019-05-16
  • 打赏
  • 举报
回复
引用 45 楼 王能 的回复:
没太清楚你想干嘛
(blankId / type == position / type)这个的意思就是blankId和position相差不能超过type等同于( Math.abs(blankId - position)<type)

这个你只要debug到那一行,然后对着等于号alt+鼠标左键即可看到是否相等,对着等号左边的/号会看到左边表达式的结果,对着变量会看到变量的值,对着方法、表达式就会看到返回值
那哥哥, 这个判断条件是为了防止什么,或者说为了去判断什么可能的,没有这个判断会怎么样。
因为后面的blank-position=1这个方法可以判断是否在两边了啊,可以判断在同一行啊。
王能 2019-05-16
  • 打赏
  • 举报
回复
这2个都只是展示图片的 主要给你讲getView方法吧: GridView会调用getView方法来获得一个view展示到ui上 position:要展示的位置,convertView:可以被重复利用(复用)的view,ViewGroup:父容器(getView返回时会自己add,此处不需要再add) if(convertView==null)如果没有可复用的view当然要自己创建一个了,有的话就直接拿来用 iv_pic_item.setLayoutParams设置子布局的属性,第一个adapter表示宽高是bitmap的宽高,第二个表示固定80dp*100dp iv_pic_item.setScaleType设置显示模式,此处为拉伸铺满,其他属性自行查找 iv_pic_item.setImageBitmap设置一张图片 iv_pic_item.setBackgroundColor设置背景颜色 return返回给GridView,gv会将这个view放到对应的位置 两个adapter都存在存在的问题:item的宽高这样写不太好,想改有点麻烦...
weixin_44556753 2019-05-16
  • 打赏
  • 举报
回复
引用 45 楼 王能 的回复:
没太清楚你想干嘛
(blankId / type == position / type)这个的意思就是blankId和position相差不能超过type等同于( Math.abs(blankId - position)<type)

这个你只要debug到那一行,然后对着等于号alt+鼠标左键即可看到是否相等,对着等号左边的/号会看到左边表达式的结果,对着变量会看到变量的值,对着方法、表达式就会看到返回值
我懂你意思了 谢谢 我之前一直以为理解错了。 还有哥哥


GridItemsAdapter
GridPicListAdapter

public class GridItemsAdapter extends BaseAdapter {

// 映射List
private List<Bitmap> mBitmapItemLists;
private Context mContext;

public GridItemsAdapter(Context mContext, List<Bitmap> picList) {
this.mContext = mContext;
this.mBitmapItemLists = picList;
}

@Override
public int getCount() {
return mBitmapItemLists.size();
}

@Override
public Object getItem(int position) {
return mBitmapItemLists.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView iv_pic_item = null;
if (convertView == null) {
iv_pic_item = new ImageView(mContext);
// 设置布局 图片
iv_pic_item.setLayoutParams(new GridView.LayoutParams(
mBitmapItemLists.get(position).getWidth(),
mBitmapItemLists.get(position).getHeight()));
// 设置显示比例类型
iv_pic_item.setScaleType(ImageView.ScaleType.FIT_CENTER);
} else {
iv_pic_item = (ImageView) convertView;
}
iv_pic_item.setImageBitmap(mBitmapItemLists.get(position));
return iv_pic_item;
}
}


public class GridPicListAdapter extends BaseAdapter {

// 映射List
private List<Bitmap> picList;
private Context context;

public GridPicListAdapter(Context context, List<Bitmap> picList) {
this.context = context;
this.picList = picList;
}

@Override
public int getCount() {
return picList.size();
}

@Override
public Object getItem(int position) {
return picList.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup arg2) {
ImageView iv_pic_item = null;
int density = (int) SchemeUtils.getDensity(context);
if (convertView == null) {
iv_pic_item = new ImageView(context);
// 设置布局 图片
iv_pic_item.setLayoutParams(new GridView.LayoutParams(
80 * density,
100 * density));
// 设置显示比例类型
iv_pic_item.setScaleType(ImageView.ScaleType.FIT_XY);
} else {
iv_pic_item = (ImageView) convertView;
}
iv_pic_item.setBackgroundColor(Color.BLACK);
iv_pic_item.setImageBitmap(picList.get(position));
return iv_pic_item;
}
}


这两个是适配器
是主要负责适配什么的。主要是做什么的

...我周六答辩了就 好惶恐
王能 2019-05-16
  • 打赏
  • 举报
回复
没太清楚你想干嘛 (blankId / type == position / type)这个的意思就是blankId和position相差不能超过type等同于( Math.abs(blankId - position)<type) 这个你只要debug到那一行,然后对着等于号alt+鼠标左键即可看到是否相等,对着等号左边的/号会看到左边表达式的结果,对着变量会看到变量的值,对着方法、表达式就会看到返回值
weixin_44556753 2019-05-16
  • 打赏
  • 举报
回复
引用 40 楼 王能 的回复:
信息太少,日志页面截图来
大神 我想问您一个问题
public static boolean isMoveable(int position) {//position为点击Item的ItemId,通
// 过和blank的ItemId进行比较,来判断二者是否相邻。
int type = PuzzleActivity.TYPE;
// 获取空格Item
int blankId = GameUtil.mBlankItemBean.getItemId() - 1;
// 不同行 相差为type
if (Math.abs(blankId - position) == type) {
return true;}
// 相同行 相差为1
if ((blankId / type == position / type) &&
Math.abs(blankId - position) == 1) {
return true;
}
return false;
}



(blankId / type == position / type)这个条件是指什么
怎么运算的。我怎么算都不想等。
王能 2019-05-16
  • 打赏
  • 举报
回复
原来还是那个拼团的功能啊。。。 举个例子:每行有10个,问你position=9和10是不是一行? 所以就有了if(是同一行&&相差1)
weixin_44556753 2019-03-19
  • 打赏
  • 举报
回复
引用 40 楼 王能 的回复:
息太少,日志页面截图来
哥哥...您能帮我改改吗,我实在是不知道怎么让7.0的安卓相机调用那块不闪退
亲爱的Joe 2019-03-15
  • 打赏
  • 举报
回复
用文字转语音,TTS
王能 2019-03-14
  • 打赏
  • 举报
回复
信息太少,日志页面截图来
weixin_44556753 2019-03-14
  • 打赏
  • 举报
回复


引用 40 楼 王能 的回复:
信息太少,日志页面截图来

成功了成功了成功了成功了,我昨天晚上解决了已经。但是给您回复,说我不能连续,最多3个。我现在就7.0的相机相册,适配了哥哥....
weixin_44556753 2019-03-13
  • 打赏
  • 举报
回复
E/HAL: load: id=gralloc != hmi->id=gralloc之前报错
weixin_44556753 2019-03-13
  • 打赏
  • 举报
回复
引用 36 楼 王能 的回复:
自己查一下吧,网上一大堆
我研究了,就是照相机相册选图片时候,不加音频才可以
weixin_44556753 2019-03-13
  • 打赏
  • 举报
回复
引用 36 楼 王能 的回复:
自己查一下吧,网上一大堆
哥哥,为什么我加了声音后,相机拍照游戏和相册游戏就不能用了,崩了
王能 2019-03-13
  • 打赏
  • 举报
回复
自己查一下吧,网上一大堆
weixin_44556753 2019-03-12
  • 打赏
  • 举报
回复
引用 34 楼 王能 的回复:
stop的地方不对,Activity不是有onDestroy吗,当然放在这里了

@Override
protected void onDestroy() {
if (mMediaPlayer != null) {
mMediaPlayer.stop();
}
super.onDestroy();
}
谢谢你哥哥,我一个个去查了,全局变量,它的进程释放摧毁,您真是太聪明了。 哥哥,安卓7.0相机问题你知道怎么解决吗,这是我程序现在唯一的小遗憾了
王能 2019-03-12
  • 打赏
  • 举报
回复
stop的地方不对,Activity不是有onDestroy吗,当然放在这里了

    @Override
    protected void onDestroy() {
        if (mMediaPlayer != null) {
            mMediaPlayer.stop();
        }
        super.onDestroy();
    }
weixin_44556753 2019-03-12
  • 打赏
  • 举报
回复
引用 30 楼 王能 的回复:
可以,尽量先自己解决
 mGvPuzzleMainDetail.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View view,
int position, long arg3) {
// 判断是否可移动
if (GameUtil.isMoveable(position)) {
// 交换点击Item与空格的位置
GameUtil.swapItems(
GameUtil.mItemBeans.get(position),
GameUtil.mBlankItemBean);
// 重新获取图片
recreateData();
// 通知GridView更改UI
mAdapter.notifyDataSetChanged();
// 更新步数
COUNT_INDEX++;
mTvPuzzleMainCounts.setText("" + COUNT_INDEX);
// 判断是否成功
if (GameUtil.isSuccess()) {
// 将最后一张图显示完整
recreateData();
mBitmapItemLists.remove(TYPE * TYPE - 1);
mBitmapItemLists.add(mLastBitmap);
// 通知GridView更改UI
mAdapter.notifyDataSetChanged();





Toast.makeText(PuzzleActivity.this, "小朋友, 恭喜你拼图成功!",
Toast.LENGTH_LONG).show();
mGvPuzzleMainDetail.setEnabled(false);
mTimer.cancel();
mTimerTask.cancel();
mMediaPlayer.stop();
}



}
}
});
mMediaPlayer.stop();放在 放在了这里,这样的话点进去游戏后只有完成游戏才会停止音乐。如果返回还是会播放音乐。这个有办法解决吗哥哥。
王能 2019-03-11
  • 打赏
  • 举报
回复
你的功能看着基本实现了啊,只是思路不对。上面发的就是思路啊。 你原有的思路:用户点击某张图片,随机裁剪后保存到本地,没有任何传参直接跳到拼图界面>拼图页读取本地图片>死胡同,无法判断图片及语音 改进的思路:用户点击某张图片>通过intent的方式将该图片的res和语音的res传到拼图界面>拼图界面进行裁剪及随机>当拼图完成,播放传过来的语音
weixin_44556753 2019-03-11
  • 打赏
  • 举报
回复
引用 14 楼 weixin_44556753 的回复:
引用 13 楼 weixin_44556753 的回复:
引用 12 楼 王能 的回复:
不喜欢私聊,太累
...那我把源码发给你,您在帮我研究下可以吗。我这块学的真的有点迷
这是我程序唯一还没实现的...功能了
只需要您给我写个样例就可以,后面的我自己来
加载更多回复(30)

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧