jolfe的安卓之旅_02Gallery的使用

来源:互联网 发布:Windows 系统 编辑:程序博客网 时间:2024/05/16 06:57

总觉的分类的名字有点俗,因为是仿照老罗的,所以缺少点特色,废话完,走起。。。

今天看了google sdk中的原始的gallery,在安卓最开始的相片拖动中有很客观的使用,现在已经是过时的方法类了。简单的说就是一个横向滑动的界面控件,没有太大的难度,唯一的问题是尝试加了一个对应变化的textview,但是出现了textview的变化不能够与gallery显示的内容对应变化,具体原因还不明,如果知道了会补上,简单把代码贴上,也会尽量不知道的东西都补充上,重要的是希望大家看到的话,有什么意见提出来,算是重新的加强安卓的开发能力,有想法的不介意一起哦。。。

近阶段想把google sdk源码开发这本书走一遍,所以内容都是围绕这里面的方向扩展学习。


package google.sdk.test_03_15;


import android.widget.TextView;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
/**
 * 如果想在layout中使用gallery,必须用到以下的类
 */
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.content.Context;


public class MainActivity extends Activity {
private TextView mTextView01;


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


init();
}


private void init() {


mTextView01 = (TextView) findViewById(R.id.tv_gallery_01);
mTextView01.setTextColor(Color.RED);


((Gallery) findViewById(R.id.my_gallery)).setAdapter(new ImageAdapter(
this));
}


class ImageAdapter extends BaseAdapter {
private Context myContext;
private int[] myImages = { android.R.drawable.btn_minus,
android.R.drawable.btn_radio,
android.R.drawable.ic_lock_idle_low_battery,
android.R.drawable.ic_menu_camera


};


public ImageAdapter(Context context) {
this.myContext = context;
}


@Override
public int getCount() {
// TODO Auto-generated method stub
return this.myImages.length;
}


@Override
public Object getItem(int positive) {
// TODO Auto-generated method stub
return positive;
}


@Override
public long getItemId(int positive) {
// TODO Auto-generated method stub
return positive;
}


@Override
public View getView(int positive, View convertView, ViewGroup arg2) {
ImageView imageView = new ImageView(myContext);
// if (convertView == null) {
// imageView = new ImageView(myContext);
// convertView = imageView;
// convertView.setTag(imageView);
// } else {
// imageView = (ImageView) convertView.getTag();
// }
imageView.setImageResource(myImages[positive]);
mTextView01.setText(getString(R.string.title_name) + (positive + 1)
+ "");
imageView.setScaleType(ImageView.ScaleType.FIT_XY);

//以下注释的内容是可以让每个图片单独显示在当前页面,也就是一个页面只显示一个图片
// imageView.setLayoutParams(new Gallery.LayoutParams(
// Gallery.LayoutParams.FILL_PARENT,
// Gallery.LayoutParams.FILL_PARENT));


imageView.setLayoutParams(new Gallery.LayoutParams(120, 120));
return imageView;
}

//这里的方法是依据距离中央的位移量,利用getScale返回view的大小(0.0f到1.0f),没有亲自试用过,有兴趣可以试试
public float getScale(boolean focused, int offset) {
return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset)));
}
}
}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >


    <TextView
        android:id="@+id/tv_gallery_01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="@string/title_name" />


    <Gallery
        android:id="@+id/my_gallery"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />


</LinearLayout>


以上是实现的代码,可能有经验的会发现textview的问题,如果有解决了的达人,不放告诉一下解决的办法,先谢过。


另外补充一些知识点,因为在getview方法中用到就查了一下,会把转载过来的地址一并单上


android:scaleType属性

转载地址:

ImageView.ScaleType.CENTER|android:scaleType="center" 以原图的几何中心点和ImagView的几何中心点为基准,按图片的原来size居中显示,不缩放,当图片长/宽超过View的长/宽,则截取图片的居中部分显示ImageView的size.当图片小于View 的长宽时,只显示图片的size,不剪裁。

ImageView.ScaleType.CENTER_CROP|android:scaleType="centerCrop以原图的几何中心点和ImagView的几何中心点为基准,按比例扩大(图片小于View的宽时)图片的size居中显示,使得图片长 (宽)等于或大于View的长(宽),并按View的大小截取图片。当原图的size大于ImageView时,按比例缩小图片,使得长宽中有一向等于ImageView,另一向大于ImageView。实际上,使得原图的size大于等于ImageView

ImageView.ScaleType.CENTER_INSIDE|android:scaleType="centerInside" 以原图的几何中心点和ImagView的几何中心点为基准,将图片的内容完整居中显示,通过按比例缩小原来的size使得图片长(宽)等于或小于ImageView的长(宽)

ImageView.ScaleType.FIT_CENTER|android:scaleType="fitCenter" 把图片按比例扩大(缩小)到View的宽度,居中显示

ImageView.ScaleType.FIT_END|android:scaleType="fitEnd把图片按比例扩大(缩小)到View的宽度,显示在View的下部分位置

ImageView.ScaleType.FIT_START|android:scaleType="fitStart把图片按比例扩大(缩小)到View的宽度,显示在View的上部分位置

ImageView.ScaleType.FIT_XY|android:scaleType="fitXY" 把图片按照指定的大小在View中显示,拉伸显示图片,不保持原比例,填满View.

ImageView.ScaleType.MATRIX|android:scaleType="matrix" 用matrix来绘制

 

依本人之见,scaletype的种类分为三类matrix(默认)、fit-X类、和center类。matrix就不多说。fit-X类中,
fitStart、fitCenter和fitEnd之间的都是根据需要使原图改变对ImgView进行适应,不剪裁,按matrix进行绘制,但它们
的区别在于基准不同。fitStart的基准为最上角的点(即matrix方式开始的点)fitCenter的基准点为中间的点
(matrix方式中可以使图片居中的点),而fitEnd的基准点为右下角的点(即matrix方式最后绘制点)。center类
中,center、centerCrop、centerInside都是以原图的几何中心点和ImagView的几何中心点为基准,且只绘制
ImagView大小的图像,不同的是是否保持原图大小和绘图的目标不同、采取的手段不同


算是最的一个新的开始,以后也会坚持下来,所以有转载的亲,希望带上转载地址,毕竟是个人的小成果,大家互相学习吧

转载地址:http://blog.csdn.net/jolfe/article/details/9118231


原创粉丝点击