使用数组刷库应用程序

时间:2014-03-11 22:22:28

标签: android actionscript-3 flash-cs5

请帮助大家,这里是我的简单图库Android应用程序的外部图像的代码 我把装载机放在了阵列中,我做了一个滑动动作,

我认为我必须选择Wither removechild或输入框架,但我无法应用它 因为发布时,事情变得混乱,刷卡效果不佳:(

你可以帮我修一下它在Flash 5.5上的AS3

 var pictureArray:Array = new Array;

var loader1 = new Loader();
loader1.load(new URLRequest("1.jpg"));
pictureArray.push(loader1);

var loader2 = new Loader();
loader2.load(new URLRequest("2.jpg"));
pictureArray.push(loader2);

var loader3 = new Loader();
loader3.load(new URLRequest("3.jpg"));
pictureArray.push(loader3);

addChild(pictureArray[0]);
pictureArray[0].x = 0; pictureArray[0].y = 0; 
var n:int = 0;


Multitouch.inputMode = MultitouchInputMode.GESTURE;

var currentGalleryItem:Number = 1;
var totalGalleryItems:Number = 3;

stage.addEventListener (TransformGestureEvent.GESTURE_SWIPE, fl_SwipeToGoToNextPreviousFrame);

function fl_SwipeToGoToNextPreviousFrame(event:TransformGestureEvent):void
{
    if(event.offsetX == 1)
    {
        if(currentGalleryItem > 1){
            currentGalleryItem--;
            slideRight();
             removeChild(pictureArray[n]);
              n = n+1;

  if (n>pictureArray.length - 1)
    n=0;

  addChild(pictureArray[n]);
  pictureArray[n].x = 0; pictureArray[n].y = 0; 
        }
    }
    else if(event.offsetX == -1)
    {
        if(currentGalleryItem < totalGalleryItems){
            currentGalleryItem++;
            slideLeft();
             removeChild(pictureArray[n]);
             n = n-1;
             if (n<0)
    n=pictureArray.length - 1;

  addChild(pictureArray[n]);
  pictureArray[n].x = 0; pictureArray[n].y = 0;
        }
    }
}
var slideCounter:Number = 0;
function slideLeft(){
    (pictureArray[n]).addEventListener("enterFrame", moveGalleryLeft);
}
function slideRight(){
    (pictureArray[n]).addEventListener("enterFrame", moveGalleryRight);
}

function moveGalleryLeft(evt:Event){
    (pictureArray[n]).x -= 48;
    slideCounter++;
    if(slideCounter == 5){
        (pictureArray[n]).removeEventListener("enterFrame", moveGalleryLeft);
        slideCounter = 0;
    }
}
function moveGalleryRight(evt:Event){
    (pictureArray[n]).x += 48;
    slideCounter++;
    if(slideCounter == 5){
        (pictureArray[n]).removeEventListener("enterFrame", moveGalleryRight);
        slideCounter = 0;
    }
}

2 个答案:

答案 0 :(得分:0)

我建议按需加载图片,动画使用一些补间引擎(在我的示例中为TweenLite),并配置以前的帧,你应该尊重内存的移动设备。代码中的大多数其他注释,我都没有能力在设备上进行测试,也不是完整的代码,它只是胴体;)

package {

    import com.greensock.TweenLite;

    import flash.display.Bitmap;
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.TransformGestureEvent;
    import flash.net.URLRequest;
    import flash.ui.Multitouch;
    import flash.ui.MultitouchInputMode;

    public class StackOverflow extends Sprite {
        private var _loader:Loader;
        private var _images:Array;
        private var _position:int;
        private var _currentFrame:Sprite;

        public function StackOverflow() {
            addEventListener(Event.ADDED_TO_STAGE, onAdded);
        }

        private function setup():void {
            _loader = new Loader();
            _images = ["1.jpg", "2.jpg", "3.jpg"];
            _currentFrame = new Sprite();

            _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadImage);
            stage.addEventListener(TransformGestureEvent.GESTURE_SWIPE, onSwipe);

            addChild(_currentFrame);
            loadImageAtPosition(_position);
        }

        private function disposeFrame(frame:Sprite):void {
            //You can cache loaded bitmaps, or dispose them
            removeChild(frame);
            var bitmap:Bitmap = frame.getChildAt(0) as Bitmap;
            bitmap.bitmapData.dispose();
        }

        private function loadImageAtPosition(index:int):void {
            //By using one loader for all tasks, you will have only last requested image
            _loader.load(new URLRequest(_images[index]));
        }

        private function offsetScreenOn(direction:Number):void {
            var offset:int;
            var start:int;

            if (direction > 0) {
                //Direction to the right side
                offset = stage.stageWidth;
            } else {
                //Direction to the left side
                offset = -stage.stageWidth;
            }

            //Starting position for new frame
            start = -offset;

            //TweenLite is great for such task
            if (_currentFrame != null) {
                //Remove previous frame
                TweenLite.to(_currentFrame, 0.8, {x: offset, onComplete: disposeFrame, onCompleteParams: [_currentFrame]});
            }

            //Initialise new frame, fill them, decor them...
            _currentFrame = new Sprite();

            if (_currentFrame != null) {
                addChild(_currentFrame);
                _currentFrame.x = start;
                //Animate in new frame
                TweenLite.to(_currentFrame, 0.8, {x: (start + offset)});
            }
        }

        private function onLoadImage(e:Event):void {
            if (_currentFrame != null) {
                var image:Bitmap = _loader.content as Bitmap;
                if (image != null) {
                    image.smoothing = true;
                    _currentFrame.addChild(image);
                    //Resize, displace image for your needs
                    //Add appear animation if you want
                }
            }
        }

        //If you want, you can postpone swipe, while in state of transition
        private function onSwipe(e:TransformGestureEvent):void {
            //Left to Right swipe
            if (e.offsetX == 1) {
                if (--_position < 0) {
                    _position = _images.length;
                }

                offsetScreenOn(e.offsetX);
                loadImageAtPosition(_position);
            }

            //Right to Left swipe
            if (e.offsetX == -1) {
                if (++_position >= _images.length) {
                    _position = 0;
                }

                offsetScreenOn(e.offsetX);
                loadImageAtPosition(_position);
            }
        }

        private function onAdded(e:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE, onAdded);

            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;

            Multitouch.inputMode = MultitouchInputMode.GESTURE;

            setup();
        }
    }
}

答案 1 :(得分:0)

签出

simple android gallery

它是Gallery应用程序的基本实现,它利用android媒体提供程序实际在设备存储中获取图像,并通过使用viewPager和RecyclerView作为指示器来提供图像滑块,在这里我将概述重要部分,您可以使用RecyclerView和Recycler Adapter来显示图像

public class picture_Adapter extends RecyclerView.Adapter<PicHolder> {

    private ArrayList<pictureFacer> pictureList;
    private Context pictureContx;
    private final itemClickListener picListerner;

    /**
     *
     * @param pictureList ArrayList of pictureFacer objects
     * @param pictureContx The Activities Context
     * @param picListerner An interface for listening to clicks on the RecyclerView's items
     */
    public picture_Adapter(ArrayList<pictureFacer> pictureList, Context pictureContx,itemClickListener picListerner) {
        this.pictureList = pictureList;
        this.pictureContx = pictureContx;
        this.picListerner = picListerner;
    }

    @NonNull
    @Override
    public PicHolder onCreateViewHolder(@NonNull ViewGroup container, int position) {
        LayoutInflater inflater = LayoutInflater.from(container.getContext());
        View cell = inflater.inflate(R.layout.pic_holder_item, container, false);
        return new PicHolder(cell);
    }

    @Override
    public void onBindViewHolder(@NonNull final PicHolder holder, final int position) {

        final pictureFacer image = pictureList.get(position);

        Glide.with(pictureContx)
                .load(image.getPicturePath())
                .apply(new RequestOptions().centerCrop())
                .into(holder.picture);

        setTransitionName(holder.picture, String.valueOf(position) + "_image");

        holder.picture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                picListerner.onPicClicked(holder,position, pictureList);
            }
        });

    }

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

下面的方法获取所有设备图像并将每个图像的信息加载到imageFacer对象中,您可以使用该对象来填充recyclerview适配器 在上方的链接

中查看完整的帖子
public ArrayList<pictureFacer> getAllImagesByFolder(String path){
        ArrayList<pictureFacer> images = new ArrayList<>();
        Uri allVideosuri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        String[] projection = { MediaStore.Images.ImageColumns.DATA ,MediaStore.Images.Media.DISPLAY_NAME,
                MediaStore.Images.Media.SIZE};
        Cursor cursor = ImageDisplay.this.getContentResolver().query( allVideosuri, projection, MediaStore.Images.Media.DATA + " like ? ", new String[] {"%"+path+"%"}, null);
        try {
            cursor.moveToFirst();
            do{
                pictureFacer pic = new pictureFacer();

                pic.setPicturName(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME)));

                pic.setPicturePath(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)));

                pic.setPictureSize(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.SIZE)));

                images.add(pic);
            }while(cursor.moveToNext());
            cursor.close();
            ArrayList<pictureFacer> reSelection = new ArrayList<>();
            for(int i = images.size()-1;i > -1;i--){
                reSelection.add(images.get(i));
            }
            images = reSelection;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return images;
}