0

私は Android UI についてもっと学ぼうとしており、いくつかの異なる UI デザインで遊んでいます。現在、Fragments を使用して ViewPager を操作し、ホーム画面をエミュレートしようとしていますが、すべてのデバイスで機能しているわけではありません。私の 7 インチ タブレットでは問題なく表示されますが (下の画像を参照)、10 インチ タブレットではページ間のトランジションが引きずられているように見えます。遅いだけでなく、画像が画面全体で永久に歪んでいます (下の画像を参照)。どちらのタブレットも Android 4.0.3 を実行しています。問題の内容と修正方法を知っている人はいますか?

画像:

7 インチ タブレットは正常に動作します。

ここに画像の説明を入力

1 ページを左にスワイプしようとした後の 10 インチ タブレット:

ここに画像の説明を入力

コード:

MainActivity.java

package com.example.layouttest;

import java.util.ArrayList;
import java.util.List;

import com.example.layouttest.MyFragment.OnFragmentInteractionListener;
import android.support.v4.app.Fragment;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;

public class MainActivity extends FragmentActivity implements OnFragmentInteractionListener{

    MyPageAdapter pageAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        List<Fragment> fragments = getFragments();
        pageAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments);
        ViewPager pager = (ViewPager)findViewById(R.id.viewpager);
        pager.setAdapter(pageAdapter);
        pager.setCurrentItem(pager.getAdapter().getCount()/2);
    }

    private List<Fragment> getFragments() {
        List<Fragment> fragList = new ArrayList<Fragment>();
        fragList.add(MyFragment.newInstance("Fragment 1"));
        fragList.add(MyFragment.newInstance("Fragment 2"));
        fragList.add(MyFragment.newInstance("Fragment 3"));
        fragList.add(MyFragment.newInstance("Fragment 4"));
        fragList.add(MyFragment.newInstance("Fragment 5"));
        return fragList;
    }

    @Override
    public void onFragmentInteraction(Uri uri) {

    }

}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent" >

   <android.support.v4.view.ViewPager
     android:id="@+id/viewpager"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent" />

</RelativeLayout>

MyPageAdapter.java

package com.example.layouttest;

import java.util.ArrayList;
import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class MyPageAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragments;

    public MyPageAdapter(FragmentManager fm) {
        super(fm);
        fragments = new ArrayList<Fragment>();
    }

    public MyPageAdapter(FragmentManager fm, List<Fragment> list){
        super(fm);
        fragments = list;
    }

    @Override
    public Fragment getItem(int arg0) {
        return fragments.get(arg0);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }

    public void addItem(Fragment f){
        fragments.add(f);
    }

    public void removeItem(Fragment f){
        fragments.remove(f);
    }

    public void removeItem(int i){
        fragments.remove(i);
    }

}

MyFragment.java

package com.example.layouttest;

import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 * A simple {@link android.support.v4.app.Fragment} subclass. Activities that
 * contain this fragment must implement the
 * {@link MyFragment.OnFragmentInteractionListener} interface to handle
 * interaction events. Use the {@link MyFragment#newInstance} factory method to
 * create an instance of this fragment.
 * 
 */
public class MyFragment extends Fragment {
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";

    // TODO: Rename and change types of parameters
    private String text;

    private OnFragmentInteractionListener mListener;

    /**
     * Use this factory method to create a new instance of this fragment using
     * the provided parameters.
     * 
     * @param param1
     *            Parameter 1.
     * @param param2
     *            Parameter 2.
     * @return A new instance of fragment MyFragment.
     */
    // TODO: Rename and change types and number of parameters
    public static MyFragment newInstance(String param1) {
        MyFragment fragment = new MyFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        fragment.setArguments(args);
        return fragment;
    }

    public MyFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            text = getArguments().getString(ARG_PARAM1);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_my, container, false);
        TextView message = (TextView)v.findViewById(R.id.textView);
        message.setText(text);
        return v;
    }

    // TODO: Rename method, update argument and hook method into UI event
    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    /**
     * This interface must be implemented by activities that contain this
     * fragment to allow an interaction in this fragment to be communicated to
     * the activity and potentially other fragments contained in that activity.
     * <p>
     * See the Android Training lesson <a href=
     * "http://developer.android.com/training/basics/fragments/communicating.html"
     * >Communicating with Other Fragments</a> for more information.
     */
    public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        public void onFragmentInteraction(Uri uri);
    }

}

fragment_my.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MyFragment" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_blank_fragment"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="16dp"
        android:text="Button" />

</RelativeLayout>
4

0 に答える 0