android 拖拉图片 Gallery 用SimpleAdater实现

 

 

除了使用BaseAdapter之外,SimpleAdapter也是一种最为常见的适配器操作类。

  既然要使用SimpleAdapter类,那么就需要准备一个List集合,而在这个List集合之中,

一定要保存Map集合,而且Map集合的key必须是String。

  既然要设置适配器,那么就要把需要的所有图片资源都进行显示。现在只有少量的图片,如果现在的图片很多呢,例如100张,按照定义100个长度的数组并不可取。

  在java中存在一种发射机制,此时可以利用发射机制进行动态加载。

  如果需要使用SimpleAdater肯定需要定义一个内部的组件,这个是一个布局文件。

 

 

 

在main.xml中

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

 

    <Gallery

        android:id="@+id/myGallery"

        android:gravity="center_vertical"

        android:spacing="3dp"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"/>

</LinearLayout>

 

 

在res/layout中新建grid_layout.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:orientation="horizontal">

 

    <ImageView

        android:id="@+id/img"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_marginTop="30dp"

    android:layout_marginLeft="70dp"

        android:scaleType="center"/>

</LinearLayout>

 

 

 

在MyGalleryProjectDemo.java程序中

package com.tarena.galleryproject;

 

import java.text.DateFormat.Field;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ArrayAdapter;

import android.widget.Gallery;

import android.widget.SimpleAdapter;

import android.widget.Toast;

 

public class MyGalleryProjectDemo extends Activity {

  private Gallery gallery = null;

  private SimpleAdapter simpleAdapter = null;

  private List<Map<String, Integer>> list = new

       ArrayList<Map<String,Integer>>();

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        super.setContentView(R.layout.main);

        this.initAdapter();

        this.initAdapter();

        this.gallery = (Gallery) super.findViewById(R.id.myGallery);

        this.gallery.setAdapter(this.simpleAdapter);

        this.gallery.setOnItemClickListener(new onItemClickListenerImpl());

    }

    private void initAdapter(){

    java.lang.reflect.Field[] fields = R.drawable.class.getDeclaredFields(); //取得全部的属性

    for(int x = 0; x < fields.length; x++){

        if(fields[x].getName().startsWith("ispic_")){  //我们所需要的图片,图片的头文件名为ispic_

          Map<String,Integer> map = new HashMap<String, Integer>();

          try {

            map.put("img", fields[x].getInt(R.drawable.class)); //必须定义好名称是img

         } catch (Exception e) {

            e.printStackTrace();

         }

          this.list.add(map);

        }

    }

    this.simpleAdapter = new SimpleAdapter(this,this.list,

          R.layout.grid_layout,new String[]{"img"},

          new int[]{R.id.img});

    }

    private class onItemClickListenerImpl implements OnItemClickListener{

 

     public void onItemClick(AdapterView<?> parent, View view, int position,

         long id) {

       Toast.makeText(MyGalleryProjectDemo.this,

            String.valueOf(position),

            Toast.LENGTH_SHORT).show();

     }

   

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt提供了Qt Quick这个强大的库来实现手势缩放和拖拉图片的功能。首先,我们需要在QML页面中创建一个Image元素来显示图片,并设置其source属性为待显示的图片路径。 在实现手势缩放功能时,我们可以使用PinchArea元素。该元素可以识别到用户的手势缩放动作,我们可以在其onPinchUpdated信号的处理函数中实现相应的功能。首先,我们可以通过PinchArea的scale属性获取手势缩放的系数,然后将该系数应用到Image元素的scale属性上,从而实现图片的缩放。 同样地,我们也可以通过DragArea元素实现图片拖拉功能。通过设置DragArea元素作用的区域,我们可以使得用户只能在指定的区域内拖拉图片。在DragArea元素的onPositionChanged信号的处理函数中,我们可以获取到图片拖拉的距离,然后将该距离应用到Image元素的x和y属性上,从而实现图片拖拉。 除了PinchArea和DragArea外,还可以使用MouseArea元素来实现基于鼠标的手势操作。鼠标的滚轮事件可以用于实现图片的缩放,鼠标按下和拖动事件可以用于实现图片拖拉。 最后,为了实现更好的用户体验,我们还可以在操作过程中添加一些动画效果,比如缩放和拖拉的过渡动画,使得操作更加平滑。 ### 回答2: 在Qt中,可以通过手势识别来实现图片的缩放和拖拽功能。首先,需要使用QGraphicsView和QGraphicsScene来显示图片。然后,通过重写QGraphicsView的event事件处理函数来响应手势操作。以下是一个简单的实现示例: ```cpp #include <QGraphicsView> #include <QGraphicsScene> #include <QGestureEvent> #include <QPinchGesture> #include <QGraphicsPixmapItem> class ImageView : public QGraphicsView { public: ImageView(QWidget *parent = nullptr) : QGraphicsView(parent) { // 创建场景和图元 QGraphicsScene *scene = new QGraphicsScene(this); QGraphicsPixmapItem *pixmapItem = new QGraphicsPixmapItem; pixmapItem->setPixmap(QPixmap("image.jpg")); // 加载图片 // 将图元添加到场景中 scene->addItem(pixmapItem); // 设置场景 setScene(scene); // 启用手势 grabGesture(Qt::PinchGesture); grabGesture(Qt::PanGesture); } protected: bool event(QEvent *event) override { if(event->type() == QEvent::Gesture) return gestureEvent(static_cast<QGestureEvent*>(event)); return QGraphicsView::event(event); } bool gestureEvent(QGestureEvent *event) { if (QGesture *gesture = event->gesture(Qt::PinchGesture)) pinchEvent(static_cast<QPinchGesture *>(gesture)); else if (QGesture *gesture = event->gesture(Qt::PanGesture)) panEvent(static_cast<QPanGesture *>(gesture)); return true; } void pinchEvent(QPinchGesture *gesture) { // 缩放图片 QGraphicsPixmapItem *pixmapItem = static_cast<QGraphicsPixmapItem *>(scene()->items().first()); qreal scaleFactor = gesture->scaleFactor(); pixmapItem->setScale(pixmapItem->scale() * scaleFactor); } void panEvent(QPanGesture *gesture) { // 拖拽图片 QGraphicsPixmapItem *pixmapItem = static_cast<QGraphicsPixmapItem *>(scene()->items().first()); QPointF delta = gesture->delta(); pixmapItem->setPos(pixmapItem->pos() + delta); } }; ``` 上述代码创建了一个自定义的ImageView类,继承自QGraphicsView。在该类中,我们重写了event函数来处理手势事件。通过重写gestureEvent函数来判断手势类型,并调用相应的处理函数进行缩放和拖拽操作。其中,pinchEvent函数用于处理缩放手势事件,panEvent函数用于处理拖拽手势事件。通过设置场景和图元使图片显示在界面上,并启用手势识别功能实现缩放和拖拽。 这样,当用户在图片上进行手势缩放或拖拽操作时,图片将根据用户的手势进行相应的变化。 ### 回答3: 在Qt中,我们可以使用手势来实现图片的缩放和拖拉功能。首先,我们需要建立一个继承自QGraphicsView的自定义视图类,该视图类用于显示图片。 在该视图类的构造函数中,我们可以设置一些初始参数,如背景颜色、滚动条的显示策略等。接着,我们需要重写一些事件处理函数来处理手势事件。 对于缩放功能,我们可以重写QGraphicsView的wheelEvent函数,当滚轮滚动事件发生时,根据滚轮的方向判断是放大还是缩小,并通过调整视图的缩放因子来实现图片的缩放效果。 对于拖拉功能,我们可以重写QGraphicsView的mousePressEvent、mouseReleaseEvent和mouseMoveEvent函数。当鼠标按下时,记录下鼠标的位置,并在移动鼠标时,计算出鼠标的位置的变化值。根据变化值的大小,通过调整视图的水平和竖直滚动条来实现图片拖拉效果。 在视图类中,我们需要添加一个QGraphicsScene对象,并将该对象与视图关联起来。我们可以在构造函数中加载图片文件,将该图片添加到QGraphicsScene中,然后再将场景与视图关联起来。 最后,在主函数中创建视图对象并显示出来。我们可以通过设置视图对象的大小、背景颜色、图片的位置等参数来定制我们想要的效果。 通过以上的步骤,我们就能够实现在Qt中使用手势来缩放和拖拉图片的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值