如何使用代码执行触摸和按住操作?

时间:2018-08-23 12:10:41

标签: android ontouchlistener

就像我们有performClick()方法来模拟views这样的按钮的点击事件一样,我们也有任何方法可以用来模拟Java代码的“触摸并按住”操作。

我编写了模拟触摸事件的代码,但是没有执行触摸操作的能力。

这是我的代码

private void onMyTouchDownEvent() {
        pause.dispatchTouchEvent(MotionEvent.obtain(0,0,MotionEvent.ACTION_DOWN, 100,100,0.5f,5,0,1,1,0,0));
    }

    private void onMyTouchUpEvent() {
        pause.dispatchTouchEvent(MotionEvent.obtain(0,0,MotionEvent.ACTION_UP, 100,100,0.5f,5,0,1,1,0,0));
    }


    pause.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction())
                {
                    case MotionEvent.ACTION_DOWN:   storiesProgressView.pause();
                                                    return true;
                    case MotionEvent.ACTION_UP:     storiesProgressView.resume();
                                                    return true;
                }

                return false;
            }
        });

这是Java代码

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;

import ateam.com.stories.API.CheckNetwork;
import ateam.com.stories.API.StoriesProgressView;
import ateam.com.stories.ApacheFileUtils.FilenameUtils;

public class MainActivity extends Activity implements StoriesProgressView.StoriesListener,View.OnClickListener {

    private static final String TAG = MainActivity.class.getSimpleName();
    private StoriesProgressView storiesProgressView;

    private String[] resources = {  "http://www.selfilife.com/temp/sample1.png",
                                    "http://www.selfilife.com/temp/sample2.png",
                                    "https://images2.alphacoders.com/548/548276.jpg",
                                    "http://www.selfilife.com/temp/sample4.png",
                                    "http://www.selfilife.com/temp/sample5.png",
                                    "http://www.selfilife.com/temp/sample6.png"
                                 };

    private ImageView       image;
    private int counter     = 0;
    //private int tcounter    = 0;
    private boolean isTouched;

    private View    reverse,skip,pause;
    ProgressBar     pb;
    Long newduration = 5000L;

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

        image               = (ImageView) findViewById(R.id.image);
        storiesProgressView = (StoriesProgressView) findViewById(R.id.stories);
        pb                  = (ProgressBar) findViewById(R.id.pb);

        reverse             = findViewById(R.id.reverse);
        skip                = findViewById(R.id.skip);
        pause               = findViewById(R.id.pause);

        reverse.setOnClickListener(this);
        skip.setOnClickListener(this);

        storiesProgressView.setStoriesCount(resources.length);  // <- set stories
        storiesProgressView.setStoryDuration(newduration);      // <- set a story duration
        storiesProgressView.setStoriesListener(this);           // <- set listener
        storiesProgressView.startStories();                     // <- start progress

        //tcounter = counter;
        //Log.d(TAG,"resources[counter] = "+resources[counter]);
        Bitmap bmp = BitmapFactory.decodeFile(resources[counter]);
        if(FilenameUtils.getExtension(resources[counter]).toString().toLowerCase().equalsIgnoreCase("png") || FilenameUtils.getExtension(resources[counter]).toString().toLowerCase().equalsIgnoreCase("jpg"))    {
            //Log.d(TAG,"image is there");
            image.setVisibility(View.VISIBLE);
            //image.setImageBitmap(bmp);
            loadImageFromPicasso(resources[counter]);
        }   else    {
            //Log.d(TAG,"video is there");
            image.setVisibility(View.GONE);
        }

        pause.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                storiesProgressView.pause();
                return true;
            }
        });

        pause.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
                    storiesProgressView.pause();
                    //Log.d(TAG,"touch down");
                }
                if (event.getAction() == android.view.MotionEvent.ACTION_UP && event.getAction() == MotionEvent.ACTION_CANCEL) {
                    storiesProgressView.resume();
                    //Log.d(TAG,"touch up");
                }

                return false;
            }
        });
    }

    @Override
    public void onNext() {

        Bitmap bmp = BitmapFactory.decodeFile(resources[++counter%resources.length]);
        //Log.d(TAG,"onNext = "+resources[counter]);
        Log.d(TAG,"counter = "+counter);

        //tcounter = counter;
        if(FilenameUtils.getExtension(resources[counter]).toString().toLowerCase().equalsIgnoreCase("png")  || FilenameUtils.getExtension(resources[counter]).toString().toLowerCase().equalsIgnoreCase("jpg") )    {
            //Log.d(TAG,"(onNext) image is there");
            image.setVisibility(View.VISIBLE);
            //image.setImageBitmap(bmp);
            loadImageFromPicasso(resources[counter]);
        }   else    {
            //Log.d(TAG,"(onNext) video is there");
            image.setVisibility(View.GONE);
        }
    }

    @Override
    public void onPrev() {
        if (counter - 1 < 0) return;

        Bitmap bmp = BitmapFactory.decodeFile(resources[--counter%resources.length]);
        Log.d(TAG,"onPrev = "+resources[counter]);

        //tcounter = counter;
        if(FilenameUtils.getExtension(resources[counter]).toString().toLowerCase().equalsIgnoreCase("png")  || FilenameUtils.getExtension(resources[counter]).toString().toLowerCase().equalsIgnoreCase("jpg"))    {
            Log.d(TAG,"(onPrev) image is there");
            image.setImageBitmap(bmp);
            //image.setVisibility(View.VISIBLE);
            loadImageFromPicasso(resources[counter]);
        }   else    {
            Log.d(TAG,"(onPrev) video is there");
            image.setVisibility(View.GONE);
        }
    }

    @Override
    public void onComplete() {
        if (counter == resources.length - 1) {
            //image.setImageResource(Integer.parseInt(resources[0]));
            //Bitmap bmp = BitmapFactory.decodeFile(resources[0]);
            //image.setImageBitmap(bmp);
            Log.d(TAG,"onComplete = "+resources[counter]);
            finish();
            //storiesProgressView.startStories();
        }
    }

    @Override
    protected void onDestroy() {
        // Very important !
        storiesProgressView.destroy();
        super.onDestroy();
    }

    @Override
    public void onClick(View v) {

        switch (v.getId())
        {
            case R.id.reverse:  storiesProgressView.reverse();
                                break;
            case R.id.skip:     storiesProgressView.skip();
                                break;
            default:break;
        }
    }

    private void loadImageFromPicasso(String url) {

        Log.d(TAG,"picasso loading url = "+url);

        if (CheckNetwork.isInternetAvailable(this))
        {
            //yes, internet is available
            //onMyTouchDownEvent();
            //pause.performLongClick();
            //storiesProgressView.pause();
            pb.setVisibility(View.VISIBLE);
            Picasso.get().load(url).placeholder(R.color.gray).into(image, new Callback() {
                @Override
                public void onSuccess() {
                    pb.setVisibility(View.INVISIBLE);
                    Log.d(TAG,"picasso success");
                    storiesProgressView.setStoryDuration(newduration);
                    Toast.makeText(getApplicationContext(),"picasso success",Toast.LENGTH_SHORT).show();
                    //onMyTouchUpEvent();
                }

                @Override
                public void onError(Exception e) {
                    pb.setVisibility(View.INVISIBLE);
                    Log.d(TAG,"picasso error");
                    Toast.makeText(getApplicationContext(),"picasso error , counter",Toast.LENGTH_SHORT).show();
                    //onMyTouchDownEvent();
                }
            });
        }
        else
        {
            Toast.makeText(getApplicationContext(),"no internet",Toast.LENGTH_SHORT).show();
            image.setBackgroundResource(R.color.gray);
            image.setImageResource(android.R.drawable.stat_sys_warning);
            //Picasso.get().load(url).placeholder(android.R.drawable.stat_sys_warning).into(image);
            //storiesProgressView.destroy();
            //onMyTouchDownEvent();
            //storiesProgressView.pause();
        }
    }

    private void onMyTouchDownEvent() {
        isTouched = true;
        pause.dispatchTouchEvent(MotionEvent.obtain(0,0,MotionEvent.ACTION_DOWN, 100,100,0.5f,5,0,1,1,0,0));
    }

    private void onMyTouchUpEvent() {
        isTouched = false;
        pause.dispatchTouchEvent(MotionEvent.obtain(0,0,MotionEvent.ACTION_UP, 100,100,0.5f,5,0,1,1,0,0));
    }

}

我如何通过触摸操作实现保持。 谢谢

1 个答案:

答案 0 :(得分:0)

一旦我执行了此类操作,我知道如何执行此操作。你要做的是,

            btn.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    // perform you task for button or view is hold 
                    Log.i("TAG", "ACTION_DOWN");
                }

                if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) {
                    // perform you task for button or view is released after hold 
                    Log.i("TAG", "ACTION_UP---ACTION_CANCEL");
                }
                return false;
            }
        });

我希望这对您有帮助。