2012-12-13 1 views
4

나는 그것을 위해이 링크를 사용하고 페이지 컬를 사용하여 응용 프로그램을 만드는 중이라서 : -클릭 리스너를 적용하는 방법?

내 요구 사항을 bitmap.But 사용하여 페이지 컬을 구현 링크에서
https://github.com/harism/android_page_curl. 

가 보는 그 컬입니다, 그것을 위해 나는 보기로 변환

public static LinearLayout createProgrammeView(final Context context, 
     int width, int height, String title, String time) { 


    // Upper layout of screen 
    LinearLayout objmainlayout = new LinearLayout(context); 

    if (height >= 320) { 
     objmainlayout.setLayoutParams(new LayoutParams(
       LayoutParams.FILL_PARENT, (height -100))); 
     Log.e("chectttttttttttlayout",""+(height-71)); 
    } else { 
     objmainlayout.setLayoutParams(new LayoutParams(
       LayoutParams.FILL_PARENT, (height - 90))); 
    } 
    objmainlayout.setBackgroundColor(Color.WHITE); 
    objmainlayout.setOrientation(LinearLayout.VERTICAL); 
    objmainlayout.setPadding(10, 0, 10,0); 


    for (int mindex = 0; mindex <3; mindex++) 
    { 
     RelativeLayout.LayoutParams objparams; 
     // Layout Root View (RelativeLayout) 

     RelativeLayout objrelativeinnerlayout = new RelativeLayout(context); 
     if (height >= 320) 
     { 
      objparams = new RelativeLayout.LayoutParams(width-20, 
        ((height - 71)/3) - 10); 
      Log.e("chectt33333tlayout",""+(((height - 71)/3) - 10)); 
     } else { 
      objparams = new RelativeLayout.LayoutParams(width, 
        ((height - 90)/3) - 10); 
     } 
     //objparams.topMargin=10; 
     objrelativeinnerlayout.setLayoutParams(objparams); 
     // rlv.setBackgroundResource(R.drawable.sss); 
     // rlv.setBackgroundResource(R.drawable.sss); 


     ImageView objrow1img1 = new ImageView(context); 
     if (height >= 320) { 
      objrow1img1.setLayoutParams(new RelativeLayout.LayoutParams(
        (width - 30)/2,((height - 71)/3) - 10)); 
     } 
     objrow1img1.setScaleType(ScaleType.FIT_XY); 

     RelativeLayout.LayoutParams objlp = (RelativeLayout.LayoutParams) objrow1img1.getLayoutParams(); 

     objlp.topMargin=10; 
     objlp.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
     objrow1img1.setId(1); 
     objrow1img1.setBackgroundColor(Color.RED); 

     if (mindex == 0) { 
      objrow1img1.setImageResource(R.drawable.fblogin); 
      objrow1img1.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        Toast.makeText(context,"onclick",Toast.LENGTH_LONG).show(); 
        Log.e("check click","good"); 
        //Intent objIntent = new Intent(context, 
          //FacebookAlbumList.class); 
        //objcoContext.startActivity(objIntent); 
       } 
      }); 
     } 
     else {/* 
      if (data != null 
        && data.size() > saveindex 
        && data.get(saveindex) != null 
        && data.get(saveindex).get(0) != null 
        && data.get(saveindex).get(0).getImagepath() != null) { 
       objrow1img1.setVisibility(View.VISIBLE); 
       System.gc(); 
       decodeBitMap(data.get(index).get(0).getImagepath(), 
         objrow1img1); 
      } else { 
       objrow1img1.setVisibility(View.INVISIBLE); 
      } 
     */} 
     objrelativeinnerlayout.addView(objrow1img1); 

     ImageView objrow1img2 = new ImageView(context); 
     objrow1img2.setLayoutParams(new RelativeLayout.LayoutParams(
       (width - 30)/2,((height - 71)/3) - 10)); 
     objrow1img2.setScaleType(ScaleType.FIT_XY); 
     objrow1img2.setBackgroundColor(Color.RED); 

     RelativeLayout.LayoutParams objlrelativelayoutparam = (RelativeLayout.LayoutParams) objrow1img2 
       .getLayoutParams(); 
     objlrelativelayoutparam.setMargins(10, 10, 0, 0); 
     objlrelativelayoutparam.addRule(RelativeLayout.RIGHT_OF,1); 

     objrelativeinnerlayout.addView(objrow1img2); 

     objmainlayout.addView(objrelativeinnerlayout); 

    } 
    return objmainlayout; 
} 

public static Bitmap loadBitmapFromView(LinearLayout v) { 
    v.measure(MeasureSpec.makeMeasureSpec(v.getLayoutParams().width, 
      MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(
      v.getLayoutParams().height, MeasureSpec.EXACTLY)); 
    v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight()); 

    Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), 
      Bitmap.Config.RGB_565); 
    Canvas c = new Canvas(b); 
    v.draw(c); 
    return b; 
} 
- : 비트 맵에 (있는 LinearLayout)보다 명확한 설명을 위해, 아이 뷰에 OnClickListener를 설정 page curl work properly unfortunatly onclick listener is not working please anyone suggest me

내 코드가 그대로 첨부 이미지 참조하시기 바랍니다

여기 Myview의 코드를 넣고 bitmap.Problem로 변환하면 어떻게 그 onclickListener를 얻을 수 있습니까? 누구든지 미리 감사드립니다.

+0

안녕하세요 누구, -v 등급의 이유를 알고 있습니까? – LOOSER

+0

안녕하세요 harism library가있는 각 페이지에 클릭 리스너를 포함시키는 방법을 알고 계십니까? – Dimitri

+0

@LOOSER 나는 또한 동일한 문제에 직면하고있다, 귀하의 요구 사항 (달성) 레이아웃 버튼이나 텍스트를 클릭 할 수 있습니까? – RaMeSh

답변

4

비슷한 문제가 발생했습니다. 내가 부모 레이아웃이 파단 포함 (contentContainer)가 작동하려면 :

    내가 설정했다

(OpenGL은 표면)

  • CurlView을 컬링 때 비트 맵으로 변환됩니다
  • 내용보기 부모 레이아웃에 대한 onClickListener는 이벤트를 잡아서 CurlView로 보내거나 보내지 않습니다. 이벤트가 CurlView로 보내지면 CurlView가 앞으로 가져옵니다 (bringToFront() 메서드 사용). 그렇지 않으면 내용보기가 맨 앞에 표시됩니다.

    이벤트가 CurlView로 전송되는지 여부를 결정하려면 탭이 페이지 컬 영역 (화면의 1/6, 양면)에있는 경우 true를 반환하는 메서드를 사용합니다. 또한 나는 사용자 상호 작용을 위해 필요한 singleTap과 longPress를 감지하기위한 제스처와 눈금 감지기가 있습니다. singleTap 또는 longPress가 잡히면 위치 (x, y)는 사용자가 터치 한 위치를 알려주므로 일부 활동을 시작하거나 컨텍스트 메뉴를 표시 할 수 있습니다.

    일부 샘플 코드 :

    나는 (그것을 "컬 이벤트"및 기타 이벤트를 구별하기 위해 "페이지 컬 영역을"사용하지 singleTap를 수정해야하기 때문에이 아직 진행중인 작품이다
    contentContainer.setOnClickListener(null); // DO NOT REMOVE THIS, IT'S A WORKAROUND 
        contentContainer.setOnTouchListener(new OnTouchListener() { 
         @Override 
         public boolean onTouch(View v, MotionEvent event) { 
          gestureDetector.onTouchEvent(event); 
          mScaleDetector.onTouchEvent(event); 
    
          int x = (int)event.getX(); 
          int y = (int)event.getY(); 
    
          boolean isMoving = event.getAction() == MotionEvent.ACTION_MOVE; 
          boolean isTouchDown = event.getAction() == MotionEvent.ACTION_DOWN; 
          boolean isTouchUp = event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL; 
          boolean pageCurlArea = isPageCurlArea(x, y); 
    
          boolean sendEventToCurlView = false; 
    
          if (isTouchDown && pageCurlArea) { 
           downInPageArea = true; 
           sendEventToCurlView = true; 
          } else if (downInPageArea && isMoving) { 
           sendEventToCurlView = true; 
          } else if (downInPageArea && isTouchUp) { 
           downInPageArea = false; 
           sendEventToCurlView = true; 
          } else if (!downInPageArea && isMoving) { 
           return false; 
          } 
    
          if (downInPageArea && isMoving && !curlViewIsOnTop) { 
           bringCurlViewToFront(); 
          } 
    
          if (sendEventToCurlView) { 
           MotionEvent mEvent = MotionEvent.obtain(event); 
           mCurlView.onTouch(v, mEvent); 
          } 
    
          return !sendEventToCurlView; 
         } 
        }); 
    

    , longPress ...), 이벤트가 걸렸고 결과에 따라 CurlView로 계속 이벤트를 보내는 지 여부에 따라 제스처와 스케일 감지기를 모두 사용하여 리턴 할 계획입니다. 이것은 1/6 페이지 컬 영역 내에서 "탭"및 "길게 누르기"를 수행하는 데 필요합니다.

    희망이 있습니다.

  • +0

    안녕하세요, curlview를 선형 레이아웃 안에 넣었지만 여전히 클릭 이벤트를 얻을 수 없거나 터치 이벤트를 수행 할 수 없습니다. curlview touch events가 이것을하기 전에 일하는 것처럼. 어떤 차이를 만들지 않거나 curlview를 뒤로 보내려면 어떻게합니까 – Prateek

    +0

    isPageCurlArea? –