简体   繁体   English

在 ListView 中移动 ImageView

[英]Moving an ImageView within a ListView

I'm looking to make it so that onClick my ImageView moves from the left side of my ListView to the right side.我正在寻找使onClick我的ImageView从我的ListView的左侧移动到右侧。

I've tried applying an animation to the ImageView directly into the adapter however this hasn't worked and I do not know what I am doing wrong.我已经尝试将 animation 直接应用到 ImageView 到适配器中,但是这没有用,我不知道我做错了什么。

If anyone can point me in the right direction that would be great, Thank you in advance.如果有人能指出我正确的方向,那就太好了,提前谢谢你。

CustomAdapter.java CustomAdapter.java

package com.example.customlistview;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.BaseAdapter;
import android.widget.ImageView;

public class CustomAdapter extends BaseAdapter {

    Context context;
    int[] images;
    ImageView image;
    LayoutInflater mInflater;

    public CustomAdapter(Context c, int[] i) {
        this.context = c; //sets the application context that has been passed to the adapter
        this.images = i; //sets the images array that has been passed to the adapter
        mInflater = (LayoutInflater.from(context)); //sets the layout inflater from context
    }

    @Override
    public int getCount() { //total number of elements in the array
        return images.length;
    }

    @Override
    public Object getItem(int position) { //gets the item using the position
        return null;
    }

    @Override
    public long getItemId(int position) { //gets the item position
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) { //this is used to update the view

        convertView = mInflater.inflate(R.layout.custom_layout, null); //inflates layout with custom_layout

        image = convertView.findViewById(R.id.imageView); //finds the imageview in the new layout
        image.setImageResource(images[position]); //sets image resource to image array and viewposition

        final int p = position; //finalises position to be used in onClick method
        image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_right); //loads in animation from folder
                image.startAnimation(animation);

            }
        });
        return convertView; //returns the
    }

}

MainActivity.java MainActivity.java

package com.example.customlistview;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

    ListView mListView; //listview holder

    int[] images = {R.drawable.img01, //images array
    R.drawable.img02,
    R.drawable.img03,
    R.drawable.img04};

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

        mListView = findViewById(R.id.listView); //find the listview in view

        CustomAdapter customAdapter = new CustomAdapter(getApplicationContext(), images); //new customadapter with images array
        //passes information of images and application context to the item adapter
        mListView.setAdapter(customAdapter); //sets the listview values with customAdapter

    }

}

I solved it and probably spent way too much time overthinking it.我解决了它,可能花了太多时间想太多。

I simply made a new method inside the adapter that held the animation code and set up a onClick listener inside the getView method that runs the animation我只是在包含 animation 代码的适配器内创建了一个新方法,并在运行 animation 的getView方法内设置了一个onClick侦听器

I don't know exactly what was causing the problem or what solved it but it works so im happy.我不知道究竟是什么导致了问题或解决了它,但它的工作原理让我很高兴。

image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View convertView) {
                runAnimation(convertView); //Animates the ImageView
            }
        });
        return convertView;
public void runAnimation(View convertView) {
        ImageView img = convertView.findViewById(R.id.img2); //get the imageView from the child
        //Animates the Image within the child
        TranslateAnimation animation = new TranslateAnimation(0.0f, 400.0f,
                0.0f, 0.0f);          //  new TranslateAnimation(xFrom,xTo, yFrom,yTo)
        animation.setDuration(5000);  // animation duration
        img.startAnimation(animation);  // start animation
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM