亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

點擊圖片交換問題。

到現在只能點擊交換完成一次,然后就再也不能點擊了。麻煩大家幫忙看一下 哪里出了問題 ,

package?com.example.game_pintu.PintuView;

import?android.content.Context;
import?android.graphics.Bitmap;
import?android.graphics.BitmapFactory;
import?android.graphics.Color;
import?android.location.OnNmeaMessageListener;
import?android.text.Layout;
import?android.util.AttributeSet;
import?android.util.TypedValue;
import?android.view.View;
import?android.view.animation.Animation;
import?android.view.animation.TranslateAnimation;
import?android.widget.ImageSwitcher;
import?android.widget.ImageView;
import?android.widget.RelativeLayout;

import?com.example.game_pintu.R;
import?com.example.game_pintu.game.utils.imagePiece;
import?com.example.game_pintu.game.utils.imageSpiliter;

import?java.lang.reflect.Array;
import?java.util.ArrayList;
import?java.util.Collection;
import?java.util.Collections;
import?java.util.Comparator;
import?java.util.List;
import?java.util.concurrent.locks.ReadWriteLock;

public?class?PintuLayout?extends?RelativeLayout?implements?View.OnClickListener?{
????private?int?mColumn=3;
????private?int?mPadding;//容器的內邊距
????private?int?mMargin=3;?//每張小圖的橫縱距離dp

????private?ImageView[]?mGamePintuItems;

????private?int?mItemWidth;

????private?Bitmap?mBitmap;?//游戲的圖片

????private?List<imagePiece>?mItemBitmaps;

????private?boolean?once;

????private?int?mWidth;//游戲面板的寬度
????private?boolean?isGameSuccess;
????private?boolean?isGameOver;


????public?PintuLayout(Context?context)?{
????????this(context,null);
????}

????public?PintuLayout(Context?context,?AttributeSet?attrs)?{
????????this(context,?attrs,0);
????}
????public?PintuLayout(Context?context,?AttributeSet?attrs,?int?defStyle)?{
????????super(context,?attrs,defStyle);
????????init();
????}

????private?void?init()?{
????????mMargin?=?(int)?TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
????????????????3,?getResources().getDisplayMetrics());
????????mPadding?=?min(getPaddingLeft(),?getPaddingRight(),?getPaddingTop(),
????????????????getPaddingBottom());
????}

????????@Override
????????protected?void?onMeasure(int?widthMeasureSpec,?int?heightMeasureSpec)?{
????????????super.onMeasure(widthMeasureSpec,?heightMeasureSpec);
????????????//?取寬和高中的小值
????????????mWidth?=?Math.min(getMeasuredHeight(),?getMeasuredWidth());

????????if(!once){
????????????initBitmap();

????????????initItem();//設置ImageView(Item)的寬高等屬性


????????????once=true;
????????}
????????????setMeasuredDimension(mWidth,?mWidth);
????}
????//進行切圖,以及排序
????private?void?initBitmap()?{
????????if(mBitmap==null){
????????????mBitmap?=?BitmapFactory.decodeResource(getResources(),
????????????????????R.drawable.kaolatwo);
????????}

????????mItemBitmaps?=?imageSpiliter.splitImage(mBitmap,?mColumn);
????????//使用sort完成亂序
????????Collections.sort(mItemBitmaps,?new?Comparator<imagePiece>(){


????????????@Override
????????????public?int?compare(imagePiece?a,?imagePiece?b)?{
????????????????return?Math.random()>0.5???1:?-1;
????????????}
????????});
????}
????//設置ImageView(Item)的寬高等屬性
????private?void?initItem()
????{
????????mItemWidth?=?(mWidth?-?mPadding?*?2?-?mMargin?*?(mColumn?-?1))
????????????????/?mColumn;
????????mGamePintuItems?=?new?ImageView[mColumn?*?mColumn];
????????//?生成我們的Item,設置Rule
????????for?(int?i?=?0;?i?<?mGamePintuItems.length;?i++)
????????{
????????????ImageView?item?=?new?ImageView(getContext());
????????????item.setOnClickListener(this);
????????????item.setImageBitmap(mItemBitmaps.get(i).getBitmap());

????????????mGamePintuItems[i]?=?item;
????????????item.setId(i?+?1);

????????????//在Item的tag中存儲了index
????????????item.setTag(i?+?"_"?+?mItemBitmaps.get(i).getIndex());

????????????RelativeLayout.LayoutParams?ip?=?new?RelativeLayout.LayoutParams(
????????????????????mItemWidth,?mItemWidth);

????????????//不是最后一列
????????????if?((i?+?1)?%?mColumn?!=?0)
????????????{
????????????????ip.rightMargin?=?mMargin;
????????????}
????????????//不是第一例
????????????if?(i?%?mColumn?!=?0)
????????????{
????????????????ip.addRule(RelativeLayout.RIGHT_OF,
????????????????????????mGamePintuItems[i?-?1].getId());
????????????}
????????????//如果不是第一行設置topMargin和Rule

????????????if?((i?+?1)?>?mColumn)
????????????{
????????????????ip.topMargin?=?mMargin;
????????????????ip.addRule(RelativeLayout.BELOW,
????????????????????????mGamePintuItems[i?-?mColumn].getId());
????????????}
????????????addView(item,?ip);

????????}
????}


????/*
????獲取多個參數的最小值
?????*/
????private?int?min(int...?params)?{
????????int?min?=?params[0];

????????for?(int?param?:?params)
????????{
????????????if?(param?<?min)
????????????????min?=?param;
????????}
????????return?min;
????}

????private?ImageView?mFirst;//第一次點擊
????private?ImageView?mSecond;//第二次點擊

????@Override
????public?void?onClick(View?v)?{
????????if?(isAniming)
????????????return;
????????//兩次點擊同一個Item
????????if(mFirst==v){
????????????mFirst.setColorFilter(null);
????????????mFirst?=?null;
????????????return;
????????}
????????if(mFirst==null){
????????????mFirst?=?(ImageView)?v;
????????????mFirst.setColorFilter(Color.parseColor("#55FF0000"));

????????}else{
????????????mSecond?=?(ImageView)?v;
????????????//?交換我們的Item
????????????exchangeView();
????????}
????}
/*
動畫層
?*/
private?RelativeLayout?mAnimLayout;
private?boolean?isAniming;
/*
交換我們的Item
?*/
private?void?exchangeView()
{
????mFirst.setColorFilter(null);
????//?構造我們的動畫層
????setUpAnimLayout();

????ImageView?first?=?new?ImageView(getContext());
????final?Bitmap?firstBitmap?=?mItemBitmaps.get(
????????????getImageIdByTag((String)?mFirst.getTag())).getBitmap();
????first.setImageBitmap(firstBitmap);
????LayoutParams?ip?=?new?LayoutParams(mItemWidth,?mItemWidth);
????ip.leftMargin?=?mFirst.getLeft()?-?mPadding;
????ip.topMargin?=?mFirst.getTop()?-?mPadding;
????first.setLayoutParams(ip);
????mAnimLayout.addView(first);

????ImageView?second?=?new?ImageView(getContext());
????final?Bitmap?secondBitmap?=?mItemBitmaps.get(
????????????getImageIdByTag((String)?mSecond.getTag())).getBitmap();
????second.setImageBitmap(secondBitmap);
????LayoutParams?ip2?=?new?LayoutParams(mItemWidth,?mItemWidth);
????ip2.leftMargin?=?mSecond.getLeft()?-?mPadding;
????ip2.topMargin?=?mSecond.getTop()?-?mPadding;
????second.setLayoutParams(ip2);
????mAnimLayout.addView(second);

????????//設置動畫
????TranslateAnimation?anim?=?new?TranslateAnimation(0,?mSecond.getLeft()
????????????-?mFirst.getLeft(),?0,?mSecond.getTop()?-?mFirst.getTop());
????anim.setDuration(300);
????anim.setFillAfter(true);
????first.startAnimation(anim);

????TranslateAnimation?animSecond?=?new?TranslateAnimation(0,
????????????-mSecond.getLeft()?+?mFirst.getLeft(),?0,?-mSecond.getTop()
????????????+?mFirst.getTop());
????animSecond.setDuration(300);
????animSecond.setFillAfter(true);
????second.startAnimation(animSecond);
????????//監聽動畫
????anim.setAnimationListener(new?Animation.AnimationListener()
????{
????????@Override
????????public?void?onAnimationStart(Animation?animation)
????????{
????????????mFirst.setVisibility(View.INVISIBLE);
????????????mSecond.setVisibility(View.INVISIBLE);

????????????isAniming?=?true;
????????}

????????????@Override
????????????public?void?onAnimationRepeat(Animation?animation)?{




????????????}
????????@Override
????????public?void?onAnimationEnd(Animation?animation)?{
????????????String?firstTag?=?(String)?mFirst.getTag();
????????????String?secondTag?=?(String)?mSecond.getTag();

????????????mFirst.setImageBitmap(secondBitmap);
????????????mSecond.setImageBitmap(firstBitmap);

????????????mFirst.setTag(secondTag);
????????????mSecond.setTag(firstTag);

????????????mFirst.setVisibility(View.VISIBLE);
????????????mSecond.setVisibility(View.VISIBLE);

????????????mFirst?=?mSecond?=?null;
????????????mAnimLayout.removeAllViews();
????????????//?判斷用戶游戲是否成功
????????}
????????});


????}
/*
根據Tga獲取Id
?*/
public?int?getImageIdByTag(String?tag)
{
????String[]?split?=?tag.split("_");
????return?Integer.parseInt(split[0]);
}

????public?int?getImageIndexByTag(String?tag)
????{
????????String[]?split?=?tag.split("_");
????????return?Integer.parseInt(split[1]);
????}
/*
構建我們的動畫層
?*/
private?void?setUpAnimLayout()
{
????if?(mAnimLayout?==?null)
????{
????????mAnimLayout?=?new?RelativeLayout(getContext());
????????addView(mAnimLayout);
????}
}

}

這是到現在的代碼

正在回答

2 回答

http://img1.sycdn.imooc.com//5e2176570001357706210392.jpg

里面加上?

isAniming?=?false;
我猜的


1 回復 有任何疑惑可以回復我~

有人嗎?


0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Android美女拼圖小游戲
  • 參與學習       25689    人
  • 解答問題       99    個

本視頻教程將帶領大家通過自定義控件實現一個拼圖游戲

進入課程

點擊圖片交換問題。

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號