有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java单击图像滑块并转到Android Studio中的另一个活动

  1. 我是Android Studio的初学者,我希望图像可以点击,这样我就可以跳转到另一个活动,在那里你可以找到关于你点击的图像的信息。我怎么做这个?有解决办法吗

  2. 我正在考虑使用onclick属性,但我不知道如何做到这一点

here's the activity_main.xml

<安卓x.viewpager2.widget.ViewPager2
    安卓:id="@+id/viewPagerImageSlider"
    安卓:layout_width="415dp"
    安卓:layout_height="413dp"
    安卓:layout_marginStart="8dp"
    安卓:layout_marginLeft="8dp"
    安卓:layout_marginTop="150dp"
    安卓:layout_marginEnd="8dp"
    安卓:layout_marginRight="8dp"
    安卓:layout_marginBottom="168dp"
    安卓:paddingStart="80dp"
    安卓:paddingEnd="80dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

</安卓x.constraintlayout.widget.ConstraintLayout>

here's the MainActivity.java

public class MainActivity extends AppCompatActivity {

private ViewPager2 viewPager2;

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

    viewPager2 = findViewById(R.id.viewPagerImageSlider);

    List<SliderItem> sliderItems = new ArrayList<>();
    sliderItems.add(new SliderItem(R.drawable.image1));
    sliderItems.add(new SliderItem(R.drawable.image2));
    sliderItems.add(new SliderItem(R.drawable.image3));
    sliderItems.add(new SliderItem(R.drawable.image4));
    sliderItems.add(new SliderItem(R.drawable.image5));

    viewPager2.setAdapter(new SliderAdapter(sliderItems, viewPager2));

    viewPager2.setClipToPadding(false);
    viewPager2.setClipChildren(false);
    viewPager2.setOffscreenPageLimit(3);
    viewPager2.getChildAt(0).setOverScrollMode(RecyclerView.OVER_SCROLL_NEVER);

    CompositePageTransformer compositePageTransformer = new CompositePageTransformer();
    compositePageTransformer.addTransformer(new MarginPageTransformer(40));
    compositePageTransformer.addTransformer(new ViewPager2.PageTransformer() {
        @Override
        public void transformPage(@NonNull View page, float position) {
            float r = 1 - Math.abs(position);
            page.setScaleY(0.85f + r * 0.15f);
        }
    });

    viewPager2.setPageTransformer(compositePageTransformer);
}

}

here's the SliderItem.java

public class SliderItem {
private int image;

SliderItem(int image) {
    this.image = image;
}

public int getImage() {
    return image;
}

}

here's the SliderAdapter.java

public class SliderAdapter extends RecyclerView.Adapter<SliderAdapter.SliderViewHolder> {

private List<SliderItem> sliderItems;
private ViewPager2 viewPager2;

SliderAdapter(List<SliderItem> sliderItems, ViewPager2 viewPager2) {
    this.sliderItems = sliderItems;
    this.viewPager2 = viewPager2;
}

@NonNull
@Override
public SliderViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    return new SliderViewHolder(
            LayoutInflater.from(parent.getContext()).inflate(
                    R.layout.slide_item_container,
                    parent,
                    false
            )
    );
}

@Override
public void onBindViewHolder(@NonNull SliderViewHolder holder, int position) {
    holder.setImage(sliderItems.get(position));
    if(position == sliderItems.size() - 2) {
        viewPager2.post(runnable);
    }
}

@Override
public int getItemCount() {
    return sliderItems.size();
}

class SliderViewHolder extends RecyclerView.ViewHolder {
    private RoundedImageView imageView;

    SliderViewHolder(@NonNull View itemView) {
        super(itemView);
        imageView = itemView.findViewById(R.id.imageSlide);
    }

    void setImage(SliderItem sliderItem) {
        imageView.setImageResource(sliderItem.getImage());
    }
}

private Runnable runnable = new Runnable() {
    @Override
    public void run() {
        sliderItems.addAll(sliderItems);
        notifyDataSetChanged();
    }
};
}

here's the slide_item_container.xml

<?xml version="1.0" encoding="utf-8"?>
<com.makeramen.roundedimageview.RoundedImageView 
xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:app="http://schemas.安卓.com/apk/res-auto"
    安卓:id="@+id/imageSlide"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent"
    安卓:adjustViewBounds="true"
    app:riv_corner_radius="12dp">


</com.makeramen.roundedimageview.RoundedImageView>

共 (1) 个答案

  1. # 1 楼答案

    我将尝试解释如何通过将图像位置从MainActivity传递到detailedActivity来传递数据

    我使用以下方法:首先,用方法名onPictureClicked()创建一个接口,然后在MainActivity中实现该接口以覆盖onPictureClicked()。在适配器中调用此方法。比如:interface.onPictureClicked(int picturePositon)

    接口。java

      public interface ClickedListener {
        
            void onPictureClicked(int position);
         
        }
    
    

    滑块适配器。爪哇

    public class SliderAdapter extends RecyclerView.Adapter<SliderAdapter.SliderViewHolder> {
    
    private List<SliderItem> sliderItems;
    private ViewPager2 viewPager2;
    private ClickedListener clickedListener;
    
    SliderAdapter(List<SliderItem> sliderItems, ViewPager2 viewPager2, ClickedListener clickedListener) {
        this.sliderItems = sliderItems;
        this.viewPager2 = viewPager2;
        this.clickedListener = clickedListener;
    }
    
    @NonNull
    @Override
    public SliderViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new SliderViewHolder(
                LayoutInflater.from(parent.getContext()).inflate(
                        R.layout.slide_item_container,
                        parent,
                        false
                )
        );
    }
    
    @Override
    public void onBindViewHolder(@NonNull SliderViewHolder holder, int position) {
        holder.setImage(sliderItems.get(position));
        if(position == sliderItems.size() - 2) {
            viewPager2.post(runnable);
        }
    }
    
    @Override
    public int getItemCount() {
        return sliderItems.size();
    }
    
    class SliderViewHolder extends RecyclerView.ViewHolder {
        private RoundedImageView imageView;
    
        SliderViewHolder(@NonNull View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.imageSlide);
        }
    
        void setImage(SliderItem sliderItem) {
            imageView.setImageResource(sliderItem.getImage());
            imageView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        clickedListener.onPictureClicked(getAdapterPosition);
                    }
                });
        }
    }
    
    private Runnable runnable = new Runnable() {
        @Override
        public void run() {
            sliderItems.addAll(sliderItems);
            notifyDataSetChanged();
        }
    };
    }
    
    public class MainActivity extends AppCompatActivity implements ClickedListener{
    
    private ViewPager2 viewPager2;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        viewPager2 = findViewById(R.id.viewPagerImageSlider);
    
        List<SliderItem> sliderItems = new ArrayList<>();
        sliderItems.add(new SliderItem(R.drawable.image1));
        sliderItems.add(new SliderItem(R.drawable.image2));
        sliderItems.add(new SliderItem(R.drawable.image3));
        sliderItems.add(new SliderItem(R.drawable.image4));
        sliderItems.add(new SliderItem(R.drawable.image5));
    
        viewPager2.setAdapter(new SliderAdapter(sliderItems, viewPager2, this));
    
        viewPager2.setClipToPadding(false);
        viewPager2.setClipChildren(false);
        viewPager2.setOffscreenPageLimit(3);
        viewPager2.getChildAt(0).setOverScrollMode(RecyclerView.OVER_SCROLL_NEVER);
    
        CompositePageTransformer compositePageTransformer = new CompositePageTransformer();
        compositePageTransformer.addTransformer(new MarginPageTransformer(40));
        compositePageTransformer.addTransformer(new ViewPager2.PageTransformer() {
            @Override
            public void transformPage(@NonNull View page, float position) {
                float r = 1 - Math.abs(position);
                page.setScaleY(0.85f + r * 0.15f);
            }
        });
    
        viewPager2.setPageTransformer(compositePageTransformer);
    }
    
      //on image clicked this method will be triggered.
     @Override
        public void onPictureClicked(int position) {
            Intent intent = new Intent(getApplicationContext(), DetaildActivity.class);
            intent.putExtra("key",position);
            startActivity(intent);
        }
    }
    

    创建此detailedActivity以从MainActivity获取意图

    public class MainActivity1 extends AppCompatActivity {
    
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.mainpage);
           //the image position will be passed from the mainActivity to this DetailedActivity
            int getPosition = getIntent().getIntExtra("key", -1);
        }
    
    
    
    
    }
    

    这只是一个通过接口演示如何实现onClick-in适配器来传输或启动另一个活动的示例