2014-01-23 5 views
5

항목을 함께 스크롤 할 필요가 있으며 선택한 항목이 부분을 아래로 확장해야합니다. 나는 현재 갤러리를 사용하고Gallery : 선택한 항목의 효과

enter image description here

은 (내가 viewflow과 viewpager로하려고했으나 항목은 그들 사이에 많은 공간을 가지고),하지만 난이 효과를 할 수있는 방법을 알아야합니다.

2 가지 아이디어가 있지만 어떻게 구현할 수 있는지 잘 모르겠습니다.

1) 확장 가능한 부분은 visibility = gone이있는 LinearLayout이며 항목을 선택하면이 레이아웃을 볼 수 있어야합니다. 내가 이것을 사용하십시오 Viewpager를 사용하여 한 번 (조각 각 요소를 치료

2) (갤러리 "onItemSelectedListener을"이없는), https://github.com/mrleolink/SimpleInfiniteCarousel)

그것은 반드시 갤러리를 할 필요가 없습니다, 어떤 생각입니다 환영합니다

나는 활동 중입니다.

+2

당신은 당신이 그것에서 원하는 출력을 얻을 수있는 경우에도 갤러리를 사용할 수 없습니다. API 수준 16 이후로 사용되지 않으므로 약 65 %의 사용자가 (현재 날짜 기준으로) 이동 중에 느슨하게되었습니다. – Shakti

+0

질문을 좀 더 자세하게 설명해 주실 수 있습니까? –

+1

@Shakti, OP가 갤러리를 사용해서는 안되는 데 동의하지만 사용 중지 된 것이 반드시 OP가 모든 사용자를 잃지는 않는다는 것을 의미하지는 않습니다. AFAIK, Gallery는 KitKat까지 계속 존재하지만 그 사용은 권장되지 않습니다. – ugo

답변

2

원하는 동작에 따라 다릅니다. 일부 질문은 한 번에 두 개 이상의 항목을 펼칠 수 있습니까? 뷰를 페이징 (원하는 위치에 스냅)하거나 부드럽게 스크롤할까요?

하나 제안 개별 셀에 대한 사용자 지정보기를 만드는 것입니다. 그런 다음 프로그래밍 방식으로 HorizontalScrollView 개체에 추가하십시오. CustomExpandView은 당신의 세포에 사용되는 것이며, 이런 일을 할 수

HorizontalScrollView hsv = new HorizontalScrollView(activity); 
LinearLayout hll = new LinearLayout(activity); 
hll.setOrientation(LinearLayout.HORIZONTAL); 
for(int i=0;i<items.length();i++){ 
     hsv.addView(new CustomExpandView(item)); 
} 

...

public class CustomExpandView extends RelativeLayout implements OnClickListener { 

MyActivity mActivity = null; 
ImageView ivImage, ivOverImage; 
RelativeLayout rlView; 

public CustomExpandView(Context context) { 
    super(context); 
    initialize(); 
} 

public CustomExpandView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    initialize(); 
} 

public void initialize() { 
    mActivity = (MyActivity) this.getContext(); 
    LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    inflater.inflate(R.layout.custom_cell_expand, this, true); 

      //you can initialize subviews here 
    rlView = (RelativeLayout) getChildAt(0); 
    ivImage = (ImageView) rlView.getChildAt(0); 
    ivOverImage = (ImageView) rlView.getChildAt(1); 

rlView.setOnFocusChangeListener(new OnFocusChangeListener(){ 

     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      LinearLayout expand = v.findViewById(R.id.view_i_want_to_expand); 
      if(hasFocus) 
       expand.setVisibility(View.VISIBLE); 
      else 
       expand.setVisibility(View.GONE); 
     } 

    }); 
} 
+0

고마워요! 이것은 내가 찾고 있던 것이 었습니다! – SolArabehety

1

답변을 직접 작성하셨습니다. 프래그먼트와 함께 ViewPager를 사용하고 창의 아래 부분을 확장하는 애니메이션을 가질 수 있습니다. 창을 전체 화면으로 표시할지 여부에 따라 다릅니다. 뷰 페이지는 반드시 조각을 필요로하지 않으며, 일반 뷰와 적절한 어댑터를 사용할 수 있습니다. 그걸 가지고 놀고 가장 좋아하는 솔루션을 확인하십시오.

다음 번에는 코드와 앱을 만들고 더 구체적인 질문을하고 코드를 통해 발생한 문제를 설명하십시오.

1

당신은 단순히 하나의 TableRow으로 (또는 당신이 필요로하는만큼)을 TableView를 정의하고 모든 클릭에 해당 할 것이다는 TableRow 내부에 그 View의 각각에 대해 onClickListener을 설정할 수, 선택한 View 자체를 확장 할 것 .

정적 번호가 View인지 여부를 알지 못합니다. 동적으로 구성 할 수도 있지만, 동적으로 구성 할 수도 있습니다.하지만 그 중 하나의 행에 실제 실제 "작업"이 적용됩니다. .

행이 View 일 때 각 행에 onClickListener()을 간단하게 선언하십시오.

OnClickListener myListener = new OnClickListener() { 
    @Override 
    public void onClick(final View v) { 
    v.setVisibility(View.VISIBLE); 
    } 
}; 

을 그리고 TableRow 내부 사용자의 모든 항목에 대한 onClick 이벤트로 : 예를 들어,이 충분해야한다에 대한

(보기 V : myTableRowViews) v.setOnClickListener (에 myListener);

이것은 단점이 있습니다. View이 선택되었지만 기본적으로 선택 취소 된 항목을 알 수 없으므로 클래스 선택 변수를 선언 한 마지막 탭을 추적해야합니다.

// In your class declare a variable like this 
View lastSelected = null; 

OnClickListener myListener = new OnClickListener() { 
    @Override 
    public void onClick(final View v) { 
    if (lastSelected != null) 
     lastSelected.setVisibility(View.GONE); 

    v.setVisibility(View.VISIBLE); 

    lastSelected = v; 
    } 
}; 

또한 당신이 더 매력적으로 만들기 위해 효과에 애니메이션을 설정할 수 있지만 주로이는 아이디어 : 리스너가 이런 식 될 것입니다, 그래서 때마다 onClick()이 해고를 설정.

마지막 한가지는 : 당신이 내부 모두 당신의 TableRowView 항목의 layout_height을 설정해야합니다 이런 식으로 작동하게하려면, 그래서 당신은 볼과 같은 추가 부분을 설정할 때 나중에 확장 할 수 있습니다. 또한 모양을 좋게하려면 모든 View의 높이가 같아야합니다 (축소 및 확장 상태 모두).

관련 문제