Cardview OnClickListener 中的图像
Image in Cardview OnClickListener
如何在卡片视图的图像视图上插入 "onclicklistener"?
上下文:我使用 ffmpeg 从视频中提取帧,并在 cardview 中显示图像,现在我需要设置一个 onclicklistener 来获取我单击的图像的位图。
如果我只是将 onClickListener 应用于视图,如下所示:
view.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
// item clicked
}
});
它会给我点击的正确图像位图吗?
我目前使用适配器在 cardview 中显示图像:
Activity
public class PreviewImageActivity extends AppCompatActivity {
private static final String FILEPATH = "filepath";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
TextView tvInstruction=(TextView)findViewById(R.id.tvInstruction) ;
GridLayoutManager lLayoutlLayout = new GridLayoutManager(PreviewImageActivity.this, 4);
RecyclerView rView = (RecyclerView)findViewById(R.id.recycler_view);
rView.setHasFixedSize(true);
rView.setLayoutManager(lLayoutlLayout);
String filePath = getIntent().getStringExtra(FILEPATH);
ArrayList<String> f = new ArrayList<String>();
File dir = new File(filePath);
tvInstruction.setText("Images stored at path "+filePath);
File[] listFile;
listFile = dir.listFiles();
for(File e:listFile)
{
f.add(e.getAbsolutePath());
}
PreviewImageAdapter rcAdapter = new PreviewImageAdapter( f);
rView.setAdapter(rcAdapter);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// handle arrow click here
if (item.getItemId() == android.R.id.home) {
finish(); // close this activity and return to preview activity (if there is any)
}
return super.onOptionsItemSelected(item);
}
}
适配器
public class PreviewImageAdapter extends RecyclerView.Adapter<PreviewImageAdapter.MyViewHolder> {
private ArrayList<String> paths;
public PreviewImageAdapter( ArrayList<String> paths) {
this.paths = paths;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_gallery, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Bitmap bmp = BitmapFactory.decodeFile(paths.get(position));
holder.ivPhoto.setImageBitmap(bmp);
}
@Override
public int getItemCount() {
return paths.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private ImageView ivPhoto;
public MyViewHolder(View itemView) {
super(itemView);
ivPhoto = (ImageView) itemView.findViewById(R.id.ivPhoto);
}
}
}
XML
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
card_view:cardUseCompatPadding="true"
card_view:cardCornerRadius="@dimen/dp4"
android:layout_margin="@dimen/dp8">
<ImageView
android:id="@+id/ivPhoto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
/>
</android.support.v7.widget.CardView>
您应该在 PreviewImageAdapter
onBindViewHolder
方法中添加 OnClickListener,您可以在其中访问图像视图。
holder.ivPhoto.setOnClickListener(new View.OnClickListener())...
另一个解决方法是在您的 ViewHolder class 上实现 onClickListener,然后 switch/case 不同操作的视图 ID,例如:
class viewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
...
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.v1:
// Your code
break;
case R.id.v2:
// Your Code
break;
}
}
}
如何在卡片视图的图像视图上插入 "onclicklistener"?
上下文:我使用 ffmpeg 从视频中提取帧,并在 cardview 中显示图像,现在我需要设置一个 onclicklistener 来获取我单击的图像的位图。
如果我只是将 onClickListener 应用于视图,如下所示:
view.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
// item clicked
}
});
它会给我点击的正确图像位图吗?
我目前使用适配器在 cardview 中显示图像:
Activity
public class PreviewImageActivity extends AppCompatActivity {
private static final String FILEPATH = "filepath";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
TextView tvInstruction=(TextView)findViewById(R.id.tvInstruction) ;
GridLayoutManager lLayoutlLayout = new GridLayoutManager(PreviewImageActivity.this, 4);
RecyclerView rView = (RecyclerView)findViewById(R.id.recycler_view);
rView.setHasFixedSize(true);
rView.setLayoutManager(lLayoutlLayout);
String filePath = getIntent().getStringExtra(FILEPATH);
ArrayList<String> f = new ArrayList<String>();
File dir = new File(filePath);
tvInstruction.setText("Images stored at path "+filePath);
File[] listFile;
listFile = dir.listFiles();
for(File e:listFile)
{
f.add(e.getAbsolutePath());
}
PreviewImageAdapter rcAdapter = new PreviewImageAdapter( f);
rView.setAdapter(rcAdapter);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// handle arrow click here
if (item.getItemId() == android.R.id.home) {
finish(); // close this activity and return to preview activity (if there is any)
}
return super.onOptionsItemSelected(item);
}
}
适配器
public class PreviewImageAdapter extends RecyclerView.Adapter<PreviewImageAdapter.MyViewHolder> {
private ArrayList<String> paths;
public PreviewImageAdapter( ArrayList<String> paths) {
this.paths = paths;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_gallery, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Bitmap bmp = BitmapFactory.decodeFile(paths.get(position));
holder.ivPhoto.setImageBitmap(bmp);
}
@Override
public int getItemCount() {
return paths.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private ImageView ivPhoto;
public MyViewHolder(View itemView) {
super(itemView);
ivPhoto = (ImageView) itemView.findViewById(R.id.ivPhoto);
}
}
}
XML
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
card_view:cardUseCompatPadding="true"
card_view:cardCornerRadius="@dimen/dp4"
android:layout_margin="@dimen/dp8">
<ImageView
android:id="@+id/ivPhoto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
/>
</android.support.v7.widget.CardView>
您应该在 PreviewImageAdapter
onBindViewHolder
方法中添加 OnClickListener,您可以在其中访问图像视图。
holder.ivPhoto.setOnClickListener(new View.OnClickListener())...
另一个解决方法是在您的 ViewHolder class 上实现 onClickListener,然后 switch/case 不同操作的视图 ID,例如:
class viewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
...
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.v1:
// Your code
break;
case R.id.v2:
// Your Code
break;
}
}
}