2017-04-14 3 views
1

을 발사하지 : https://github.com/moondroid/CoverFlow버튼 나는 다음과 커버 플로우 라이브러리를 사용하고 클릭 이벤트

각각의 커버는 자신의 FrameLayout이 있습니다. framelayout에 추가 한 버튼은 onClick 이벤트를 실행하지 않습니다. 특히 적용 버튼을 클릭했을 때 등급 레이블을 클릭하면 onClick 이벤트가 실행되지만 적용 버튼에 onClick 이벤트가 추가되었습니다. coverflow with framelayout 나는 레이아웃이 어떤 의미에서 혼란 스럽다고 가정합니다. 성공하지 않고도 이전 질문에서 여러 가지 해결책을 시도했습니다.

LayoutInflater inflater = (LayoutInflater) mContext. 
       getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     rowView = inflater.inflate(R.layout.item_coverflow, parent, false); 

아래의 상세 코드를 참조하십시오 : 레이아웃을 팽창하면

나는 false로 attachToRoot 매개 변수를 부모 뷰를 전달하고 설정합니까. 명확하게하기 위해 그림 용 버튼은 button을 적용하고 onClick 수신기는 CoverFlowAdapter.java으로 할당됩니다. 도와 주시면 감사하겠습니다. 감사합니다.

내가 RelativeLayout의 상기 맞춤 커버 플로우 요소를 추가 한

:

<?xml version="1.0" encoding="utf-8"?> 

    <RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/activity_register" 
     android:layout_gravity="center" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     xmlns:coverflow="http://schemas.android.com/apk/res-auto" 
     tools:context="za.co.xxx.xxx.VacancyActivity"> 

    <it.moondroid.coverflow.components.ui.containers.FeatureCoverFlow 
     android:id="@+id/coverFlow" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     coverflow:coverHeight="@dimen/cover_height" 
     coverflow:coverWidth="@dimen/cover_width" 
     coverflow:maxScaleFactor="1.5" 
     coverflow:reflectionGap="0px" 
     coverflow:rotationThreshold="0.5" 
     coverflow:scalingThreshold="0.5" 
     coverflow:spacing="0.6" /> 
    </RelativeLayout> 

커버 플로우는 I 이드 buttonApply 특별히 버튼 관련 버튼을 추가 한 커버 플로우, 각 뷰의 framelayouts를 사용하는 경우입니다 포인트 :

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="@dimen/cover_width" 
    android:layout_height="@dimen/cover_height" 
    android:background="@color/black_transparent"> 

    <TableLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:padding="10dp" 
     android:stretchColumns="0,1"> 
     <TableRow> 
      <TextView 
       android:id="@+id/textViewPracticeNameLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewPracticeName" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewEmploymentTypeLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewEmploymentType" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewVacancyTypeLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewVacancyType" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewAddressLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewAddress" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewRatePerHourLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewRatePerHour" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewStartDateLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewStartDate" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewEndDateLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewEndDate" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewDistanceTravelLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewDistanceTravel" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewTimeToTravelLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewTimeToTravel" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewRatingLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewRating" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <Button 
       android:id="@+id/buttonViewProfileVideo" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/colorPrimary" 
       android:layout_span="2" 
       android:background="@color/transparent" /> 
     </TableRow> 

     <TableRow> 
      <Button 
       android:id="@+id/buttonViewMoreDetails" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/colorPrimary" 
       android:layout_span="2" 
       android:background="@color/transparent" /> 
     </TableRow> 

     <TableRow> 
      <Button 
       android:id="@+id/buttonApply" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/bright_green" 
       android:layout_span="2" 
       android:background="@color/transparent" 
       android:clickable="true"/> 
     </TableRow> 

    </TableLayout> 

</FrameLayout> 

커버 플로우는 여기 초기화 :

public class VacancyActivity extends AppCompatActivity { 

    private FeatureCoverFlow coverFlow; 
    private CoverFlowAdapter coverFlowAdapter; 
    private ArrayList<VacancyEntity> mData = new ArrayList<>(0); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_vacancy); 
     setup(); 
    } 

    private void setup() { 

     mData.add(new VacancyEntity(
       R.string.practice, "ABC Inc", 
       R.string.employment_type, "asldkjhf", 
       R.string.vacancy_type, "sdkfaslkdjf", 
       R.string.address, "asdfasdf", 
       R.string.rate_per_hour, "asdfasdf", 
       R.string.start_date, "asdkfdf", 
       R.string.end_date, "asdfasdf", 
       R.string.distance_to_travel, "sdkfjslkdjf", 
       R.string.time_to_travel, "asdfasdf", 
       R.string.rating, "asdlkfj", 
       R.string.view_practice_profile_video, 
       R.string.view_more_details, 
       R.string.apply)); 

     coverFlowAdapter = new CoverFlowAdapter(this); 
     coverFlowAdapter.setData(mData); 
     coverFlow = (FeatureCoverFlow) findViewById(R.id.coverFlow); 
     coverFlow.setAdapter(coverFlowAdapter); 
    } 
} 
012 3,516,

레이아웃이 팽창 사용자 정의 어댑터 :

public class CoverFlowAdapter extends BaseAdapter { 
    private ArrayList<VacancyEntity> mData = new ArrayList<>(0); 
    private Context mContext; 

    public CoverFlowAdapter(Context context) { 
     mContext = context; 
    } 

     public void setData(ArrayList<VacancyEntity> data) { 
     mData = data; 
    } 

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

    @Override 
    public Object getItem(int pos) { 
     return mData.get(pos); 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View rowView = convertView; 

     if (rowView == null) { 

      LayoutInflater inflater = (LayoutInflater) mContext. 
        getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      rowView = inflater.inflate(R.layout.item_coverflow, parent, false); 

      ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.textViewPracticeNameLbl = (TextView) 
        rowView.findViewById(R.id.textViewPracticeNameLbl); 
      viewHolder.textViewPracticeName = 
        (TextView) rowView.findViewById(R.id.textViewPracticeName); 
      viewHolder.textViewEmploymentTypeLbl = 
        (TextView) rowView.findViewById(R.id.textViewEmploymentTypeLbl); 
      viewHolder.textViewEmploymentType = 
        (TextView) rowView.findViewById(R.id.textViewEmploymentType); 
      viewHolder.textViewVacancyTypeLbl = 
        (TextView) rowView.findViewById(R.id.textViewVacancyTypeLbl); 
      viewHolder.textViewVacancyType = 
        (TextView) rowView.findViewById(R.id.textViewVacancyType); 
      viewHolder.textViewAddressLbl = 
        (TextView) rowView.findViewById(R.id.textViewAddressLbl); 
      viewHolder.textViewAddress = 
        (TextView) rowView.findViewById(R.id.textViewAddress); 
      viewHolder.textViewRatePerHourLbl = (TextView) rowView.findViewById(R.id.textViewRatePerHourLbl); 
      viewHolder.textViewRatePerHour = 
        (TextView) rowView.findViewById(R.id.textViewRatePerHour); 
      viewHolder.textViewStartDateLbl = 
        (TextView) rowView.findViewById(R.id.textViewStartDateLbl); 
      viewHolder.textViewStartDate = 
        (TextView) rowView.findViewById(R.id.textViewStartDate); 
      viewHolder.textViewEndDateLbl = 
        (TextView) rowView.findViewById(R.id.textViewEndDateLbl); 
      viewHolder.textViewEndDate = 
        (TextView) rowView.findViewById(R.id.textViewEndDate); 
      viewHolder.textViewDistanceToTravelLbl = 
        (TextView) rowView.findViewById(R.id.textViewDistanceTravelLbl); 
      viewHolder.textViewDistanceToTravel = 
        (TextView) rowView.findViewById(R.id.textViewDistanceTravel); 
      viewHolder.textViewTimeToTravelLbl = 
        (TextView) rowView.findViewById(R.id.textViewTimeToTravelLbl); 
      viewHolder.textViewTimeToTravel = 
        (TextView) rowView.findViewById(R.id.textViewTimeToTravel); 
      viewHolder.textViewRatingLbl = 
        (TextView) rowView.findViewById(R.id.textViewRatingLbl); 
      viewHolder.textViewRating = 
        (TextView) rowView.findViewById(R.id.textViewRating); 
      viewHolder.buttonViewProfileVideo = 
        (Button) rowView.findViewById(R.id.buttonViewProfileVideo); 
      viewHolder.buttonViewMoreDetails = 
        (Button) rowView.findViewById(R.id.buttonViewMoreDetails); 
      viewHolder.buttonApply = 
        (Button) rowView.findViewById(R.id.buttonApply); 
      viewHolder.buttonApply.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Toast.makeText(view.getContext(), "hello", Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      rowView.setTag(viewHolder); 
     } 

     ViewHolder holder = (ViewHolder) rowView.getTag(); 

     holder.textViewPracticeNameLbl.setText(mData.get(position).practiceLblId); 
     holder.textViewPracticeName.setText(mData.get(position).practiceData); 
     holder.textViewEmploymentTypeLbl.setText(mData.get(position).employmentTypeLblId); 
     holder.textViewEmploymentType.setText(mData.get(position).employmentTypeData); 
     holder.textViewVacancyTypeLbl.setText(mData.get(position).vacancyTypeLblId); 
     holder.textViewVacancyType.setText(mData.get(position).vacancyTypeData); 
     holder.textViewAddressLbl.setText(mData.get(position).addressLblId); 
     holder.textViewAddress.setText(mData.get(position).addressData); 
     holder.textViewRatePerHourLbl.setText(mData.get(position).ratePerHourLblId); 
     holder.textViewRatePerHour.setText(mData.get(position).ratePerHourData); 
     holder.textViewStartDateLbl.setText(mData.get(position).startDateLblId); 
     holder.textViewStartDate.setText(mData.get(position).startDateData); 
     holder.textViewEndDateLbl.setText(mData.get(position).endDateLblId); 
     holder.textViewEndDate.setText(mData.get(position).endDateData); 
     holder.textViewDistanceToTravelLbl.setText(mData.get(position).distanceToTravelLblId); 
     holder.textViewDistanceToTravel.setText(mData.get(position).distanceToTravelData); 
     holder.textViewTimeToTravelLbl.setText(mData.get(position).timeToTravelLblId); 
     holder.textViewTimeToTravel.setText(mData.get(position).timeToTravelData); 
     holder.textViewRatingLbl.setText(mData.get(position).ratingLblId); 
     holder.textViewRating.setText(mData.get(position).ratingData); 
     holder.buttonViewProfileVideo.setText(mData.get(position).viewPracticeProfileVideoLblId); 
     holder.buttonViewMoreDetails.setText(mData.get(position).viewMoreDetailsLblId); 
     holder.buttonApply.setText(mData.get(position).applyLblId); 

     return rowView; 
    } 


    private static class ViewHolder { 
     private TextView textViewPracticeNameLbl; 
     private TextView textViewPracticeName; 
     private TextView textViewEmploymentTypeLbl; 
     private TextView textViewEmploymentType; 
     private TextView textViewVacancyTypeLbl; 
     private TextView textViewVacancyType; 
     private TextView textViewAddressLbl; 
     private TextView textViewAddress; 
     private TextView textViewRatePerHourLbl; 
     private TextView textViewRatePerHour; 
     private TextView textViewStartDateLbl; 
     private TextView textViewStartDate; 
     private TextView textViewEndDateLbl; 
     private TextView textViewEndDate; 
     private TextView textViewDistanceToTravelLbl; 
     private TextView textViewDistanceToTravel; 
     private TextView textViewTimeToTravelLbl; 
     private TextView textViewTimeToTravel; 
     private TextView textViewRatingLbl; 
     private TextView textViewRating; 
     private Button buttonViewProfileVideo; 
     private Button buttonViewMoreDetails; 
     private Button buttonApply; 
    } 
} 
+0

먼저 CoverFlow를 의심합니다. 어쩌면 라이브러리의 크기 조절 과정 때문일 수 있습니다. Android Studio에서 LayoutInspector 도구를 사용하여 'Button'의 클릭 상자가 'rating'레이블의 위치로 이동하지 않았는지 확인하십시오. –

+0

@BartekLipinski, 고맙습니다. 나는 검사관을 돌렸고 실제로 클릭 상자가 위치를 벗어나 이동되었습니다. –

답변

0

좋아, 그래서 질문에 대한 코멘트에서 계속 : 나는 도서관 정말 익숙하지 않다

, 그래서 나는거야 말해 당신은 내가 무슨 일이 일어나고 있는지를 생각하고 나는이 문제를 극복하려고 얼마나 : (scaleXscaleY 매개 변수를 사용하여)

이 라이브러리는 아마도 maxScaleFactor에 현재 페이지를 확장됩니다. 결과는 Views (클릭 상자 포함)의 실제 위치가 화면에 나타나는 것과 반대가됩니다.

maxScaleFactor1.0f으로 설정하고 다른 매개 변수를 정확하게 조정하십시오.