2012-12-13 104 views
4

我通過頁面捲曲對於正在使用此鏈接提出申請: -如何應用點擊監聽器?

https://github.com/harism/android_page_curl. 

在實施使用bitmap.But我要求頁面捲曲該鏈接是捲曲查看,對於我轉換 查看(LinearLayout中)爲位圖,並設置onclicklistener兒童來看,更多的澄清,請參閱 附加的圖像 page curl work properly unfortunatly onclick listener is not working please anyone suggest me

我的代碼: -

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; 
} 

在這裏,我把Myview的代碼,並將其轉換爲位圖。問題是,我怎樣才能得到onclickListener? 請任何人提前告知我的感謝。

+0

嗨,大家好,我可以知道-ve評級的原因嗎? – LOOSER

+0

嗨,你知道如何包括每個頁面上的點擊監聽器與哈利庫嗎? – Dimitri

+0

@LOOSER我也面臨同樣的問題,您的要求已完成(達到)佈局按鈕或文本點擊? – RaMeSh

回答

4

我遇到了類似的問題。得到它的工作我有一個父佈局(contentContainer),其中包含2子視圖:

  • 冰壺
  • CurlView時(OpenGL的表面)

我必須設置將其轉化爲位圖內容視圖一個onClickListener到父佈局來捕獲事件併發送或不發送它們到CurlView。當事件發送到CurlView時,CurlView被帶到前面(使用bringToFront()方法)。否則,內容視圖會顯示在前面。

,以決定是否事件被髮送或不給CurlView我使用,如果水龍頭是頁面捲曲區域(近似1/6的畫面,兩側)內返回true的方法。此外,我有一個手勢和比例檢測器來檢測singleTap和longPress,這是我們需要的用戶交互。當捕捉到一個單擊或長按時,位置(x,y)會告訴我用戶觸摸的位置,以便我可以啓動某個活動,顯示上下文菜單等等。

一些示例代碼:

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; 
     } 
    }); 

這是一項正在進行的工作,但因爲我需要修改它不使用「頁面捲曲區」,「捲曲事件」等事件之間進行區分(singleTap, longPress ...),爲此我計劃使用手勢和比例檢測器在事件發生時返回並根據結果繼續將事件發送到CurlView。這是在1/6頁捲曲區域內執行「輕敲」和「長按」所必需的。

希望它有幫助。

+0

嘿,我已經把我的curlview放在一個線性佈局中,但是我仍然無法獲得點擊事件或觸摸事件,我應該怎麼做才能做到這一點。正如之前做這件事一樣,curlview碰觸事件。沒有什麼區別,或者我怎麼把curlview發回 – Prateek

+0

isPageCurlArea? –