【问题标题】:How to make images swipe in android studio? Guide me to add swipe function in my app如何让图像在 android studio 中滑动?指导我在我的应用中添加滑动功能
【发布时间】:2021-08-05 13:01:58
【问题描述】:

首先,我是 android 开发的新手。我正在开发墙纸应用程序,我想添加可滑动的图像。壁纸应用程序的工作类似于 ManiActivity,因为每当用户单击任何类别壁纸时,都会显示所有类别并在点击监听器时从 firebase 数据库的网格视图中显示。单击特定壁纸后,它会在全图活动中显示,其中壁纸将全屏显示,并带有两个按钮应用和下载。在 fullimage 活动中,我想添加该滑动功能。意味着每当用户向左向右滑动时,它将分别显示下一个图像。请指导我如何做到这一点。帮我添加滑动功能。我看过它的大部分视频教程,但我不明白。请指导我,我会更好。

MainActivity 代码:-

public class MainActivity extends AppCompatActivity {

private CardView animal;
private CardView birds;
private CardView marinelife;
private CardView bike;
private CardView car;
private CardView flowers;
private CardView cutebaby;
private CardView nature;
private CardView superhero;
private CardView themes;



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



    animal = findViewById(R.id.animal);
    birds = findViewById(R.id.birds);
    marinelife = findViewById(R.id.marinelife);
    bike = findViewById(R.id.bike);
    car = findViewById(R.id.car);
    flowers = findViewById(R.id.flowers);
    cutebaby = findViewById(R.id.cutebaby);
    nature = findViewById(R.id.nature);
    superhero = findViewById(R.id.superhero);
    themes = findViewById(R.id.themes);




    animal.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            Intent a = new Intent(getApplicationContext(), AnimalWallpaper.class);
            startActivity(a);

        }
    });

    birds.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent birds = new Intent(getApplicationContext(), BirdsWallpaper.class);
            startActivity(birds);
        }
    });

    marinelife.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent marine = new Intent(getApplicationContext(), MarinelifeWallpaper.class);
            startActivity(marine);
        }
    });


    bike.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            Intent b = new Intent(getApplicationContext(), BikeWallpaper.class);
            startActivity(b);
        }
    });

    car.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent c = new Intent(getApplicationContext(), CarWallpaper.class);
            startActivity(c);
        }
    });

    flowers.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent g = new Intent(getApplicationContext(), FlowersWallpaper.class);
            startActivity(g);
        }
    });

    cutebaby.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent cute = new Intent(getApplicationContext(), CutebabyWallpaper.class);
            startActivity(cute);
        }
    });

    nature.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            Intent n = new Intent(getApplicationContext(), NatureWallpaper.class);
            startActivity(n);
        }
    });

    superhero.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent s = new Intent(getApplicationContext(), HereosWallpaper.class);
            startActivity(s);

        }
    });


    themes.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent t = new Intent(getApplicationContext(), ThemesWallpaper.class);
            startActivity(t);

        }

    });

}

}

壁纸适配器代码:-

public class WallpaperAdapter extends RecyclerView.Adapter<WallpaperAdapter.WallpaperViewHolder> {

private ArrayList<String> list;
private Context context;

public WallpaperAdapter(ArrayList<String> list, Context context) {
    this.list = list;
    this.context = context;
}

@NonNull
@org.jetbrains.annotations.NotNull
@Override
public WallpaperViewHolder onCreateViewHolder(@NonNull @org.jetbrains.annotations.NotNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.custom_image_layout, parent, false );

    return new WallpaperViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull @org.jetbrains.annotations.NotNull WallpaperAdapter.WallpaperViewHolder holder, int position) {

    Glide.with(context).load(list.get(position)).into(holder.imageView);

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent intent = new Intent(context, FullImageActivity.class);
            intent.putExtra("images", list.get(position));
            context.startActivity(intent);
        }
    });

}

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

public class WallpaperViewHolder extends RecyclerView.ViewHolder {

    ImageView imageView;

    public WallpaperViewHolder(@NonNull @NotNull View itemView) {
        super(itemView);

        imageView = itemView.findViewById(R.id.item_image);
    }
}

}

FullImageActivity 代码:-

public class FullImageActivity extends AppCompatActivity {

private ImageView fullimage;
private Button apply;
private Button download;
private String url;
Bitmap bitmap;
private String imageName = "wallpaper";

private static final int REQUEST_CODE = 100;




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





    fullimage = findViewById(R.id.fullImage);
    apply = findViewById(R.id.apply);
    download = findViewById(R.id.download);

    Picasso.get().load(url).into(fullimage);
    
    url = getIntent().getStringExtra("images");

    Glide.with(this).load(url).into(fullimage);

    apply.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            setBackground();
            Toast.makeText(FullImageActivity.this, "Wallpaper Applied Sucessfully....", Toast.LENGTH_SHORT).show();
        }
    });


    download.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) ==
                        PackageManager.PERMISSION_DENIED) {

                    String[] permission = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
                    requestPermissions(permission,REQUEST_CODE);

                }

                else {
                    saveImage();
                }
            }


        }
    });
}

private void saveImage() {

    bitmap = ((BitmapDrawable)fullimage.getDrawable()).getBitmap();
    String time = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(System.currentTimeMillis());
    File path = Environment.getExternalStorageDirectory();
    File dir = new File(path+"/Free HD Wallpapers 2021");
    dir.mkdirs();
    String imagename = time+".PNG";
    File file = new File(dir,imagename);
    OutputStream out;

    try {

        out = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.PNG,100,out);
        out.flush();
        out.close();
        Toast.makeText(FullImageActivity.this, "Image save in "+getString(R.string.app_name), Toast.LENGTH_SHORT).show();

    } catch (Exception e) {

        Toast.makeText(FullImageActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();

    }





}


private void setBackground() {

    Bitmap bitmap = ((BitmapDrawable)fullimage.getDrawable()).getBitmap();

    WallpaperManager manager = WallpaperManager.getInstance(getApplicationContext());

    try {
        manager.setBitmap(bitmap);
    } catch (IOException e) {
        Toast.makeText(this, "Error : "+e.getMessage(), Toast.LENGTH_SHORT).show();
        e.printStackTrace();
    }



}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull @NotNull String[] permissions, @NonNull @NotNull int[] grantResults) {

    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    switch (requestCode) {

        case REQUEST_CODE: {

            if (grantResults.length > 0 && grantResults[0] ==

                    PackageManager.PERMISSION_GRANTED) {

            } else {
                Toast.makeText(this, "Permission Enable", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

}

类别代码之一:-

public class BikeWallpaper extends AppCompatActivity {
private RecyclerView recyclerView;
private ProgressBar progressBar;
private DatabaseReference reference;
private ArrayList<String> list;
private WallpaperAdapter adapter;

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


    reference = FirebaseDatabase.getInstance().getReference().child("bike");

    recyclerView = findViewById(R.id.recyclerViewBike);
    progressBar = findViewById(R.id.progressBarBike);

    getData();
}

private void getData() {
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) {

            progressBar.setVisibility(View.GONE);
            list = new ArrayList<>();

            for (DataSnapshot shot : snapshot.getChildren()) {

                String data = shot.getValue().toString();
                list.add(data);
            }

            recyclerView.setLayoutManager(new GridLayoutManager(BikeWallpaper.this, 2));
            adapter  = new WallpaperAdapter(list, BikeWallpaper.this);
            recyclerView.setAdapter(adapter);
            progressBar.setVisibility(View.GONE);


        }

        @Override
        public void onCancelled(@NonNull @NotNull DatabaseError error) {

            progressBar.setVisibility(View.GONE);
            Toast.makeText(BikeWallpaper.this, "Error : "+error.getMessage() , Toast.LENGTH_SHORT).show();
        }
    });
}

}

【问题讨论】:

标签: android firebase firebase-realtime-database android-wallpaper


【解决方案1】:

对于您一次只能看到一张图像并希望在其中滑动的屏幕,请使用 ViewPager。看这个例子:https://github.com/chiuki/android-swipe-image-viewer/blob/master/src/com/sqisland/android/swipe_image_viewer/MainActivity.java

您只想使用 ArrayList 或动态的东西来保存所有图像,而不是适配器的数组。对于网格视图屏幕,使用带有 GridLayoutManager 的 RecyclerView。

【讨论】:

  • 抱歉,我不明白你能告诉我更多关于如何让特定孩子的图像可以滑动的信息。我的项目包含 450 多张壁纸。非常感谢您的回复。
  • 这里有一些很好的答案,解释了如何使用 ViewPager 滑动图像:stackoverflow.com/questions/5101629/how-to-swipe-images
  • 大部分我都看过,但我不明白。请帮助获得完美的解决方案,我的意思是我必须在适配器或哪个活动中进行更改。
  • 研究 RecyclerView 和 Adapters。除了这两个概念之外,为您的 RecyclerView 合并 GridLayoutManager 和为您的 ListView 合并 ViewPager 也很重要。在 RecyclerView 中选择图像可以将您导航到具有意图的“WallpaperDetailsActivity”。在该活动中,您可以使用 ViewPager 适配器显示您的 ListView。如果您了解如何实现这四件事:1. RecyclerView, 2. Adapters, 3. GridLayoutManager, 4. ViewPager
  • 好的。非常感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多